Skip to contentSkip to conversation

Two small follow-up patches for nvme multipathing

PATCH New Hannes Reinecke 3 participants 7 messages Nov 10, 2017 – Nov 13, 2017 NVMe

lore
Share & tools
lore
#0 lore raw

cover Two small follow-up patches for nvme multipathing

Hi all,

here are some small follow-up patches for nvme multipathing. Patches are relative to hchs nvme-mpath branch.

Hannes Reinecke (2):
nvme: add Kconfig option 'NVME_MULTIPATH_DEFAULT'
nvme: expose subsys attribute to sysfs

 drivers/nvme/host/Kconfig     | 11 ++++++++++
 drivers/nvme/host/core.c      | 47 +++++++++++++++++++++++++++++++++++++++++++
 drivers/nvme/host/multipath.c |  8 +++++++-
 3 files changed, 65 insertions(+), 1 deletion(-)
Signature · 1 line
1.8.5.6
#1 lore raw

PATCH 1/2 nvme: add Kconfig option 'NVME_MULTIPATH_DEFAULT'

Add a configuration option to enable or disable NVMe multipath per default.

Signed-off-by Hannes Reinecke <hare at suse.com>
---
 drivers/nvme/host/Kconfig     | 11 +++++++++++
 drivers/nvme/host/multipath.c |  8 +++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)
drivers/nvme/host/Kconfig +11 -0
index 4588680..cc0cbab 100644
@@ -22,6 +22,17 @@ config NVME_MULTIPATH
 	   /dev/nvneXnY device will show up for each NVMe namespaces,
 	   even if it is accessible through multiple controllers.
 
+config NVME_MULTIPATH_DEFAULT
+       bool "NVMe multipath support enabled by default"
+       depends on NVME_MULTIPATH
+	default y
+       ---help---
+          This option enables multipath access to NVMe subsystems
+	  per default. It can be overridden with the boot/module option
+	  nvme_core.multipath later on.
+
+	  If unsure say Y.
+
 config NVME_FABRICS
 	tristate
 
drivers/nvme/host/multipath.c +7 -1
index 8502758..9ceef3e 100644
@@ -14,7 +14,13 @@
 #include <linux/moduleparam.h>
 #include "nvme.h"
 
-static bool multipath = true;
+#ifdef CONFIG_NVME_MULTIPATH_DEFAULT
+#define NVME_MULTIPATH_DEFAULT true
+#else
+#define NVME_MULTIPATH_DEFAULT false
+#endif
+
+static bool multipath = NVME_MULTIPATH_DEFAULT;
 module_param(multipath, bool, 0644);
 MODULE_PARM_DESC(multipath,
 	"turn on native support for multiple controllers per subsystem");
Signature · 1 line
1.8.5.6
#2 lore raw

PATCH 1/2 nvme: add Kconfig option 'NVME_MULTIPATH_DEFAULT'

Quoted 2 lines · Hannes Reinecke

Add a configuration option to enable or disable NVMe multipath per default.

NAK. If you really want a local override please keep this as a local patch.

#3 lore raw

PATCH 1/2 nvme: add Kconfig option 'NVME_MULTIPATH_DEFAULT'

Quoted 7 lines · Christoph Hellwig
Quoted 2 lines · Hannes Reinecke

Add a configuration option to enable or disable NVMe multipath per default.

NAK. If you really want a local override please keep this as a local patch.

Well, I had to try :-)
But keeping a distro-specific patch (if the need arises) is fine by me.

Cheers,

Hannes

Signature · 5 lines
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare at suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 N?rnberg
GF: F. Imend?rffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG N?rnberg)
#4 lore raw

PATCH 2/2 nvme: expose subsys attribute to sysfs

In reply to Hannes Reinecke

We should be exposing the subsystem attributes like 'model' and 'subsysnqn' to sysfs to allow for easier identification of the subsystem.

Signed-off-by Hannes Reinecke <hare at suse.com>
---
 drivers/nvme/host/core.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)
drivers/nvme/host/core.c +47 -0
index 6e9effa..4e574b4 100644
@@ -1912,6 +1912,52 @@ static struct nvme_subsystem *__nvme_find_get_subsystem(const char *subsysnqn)
 	return NULL;
 }
 
+#define SUBSYS_ATTR_RO(_name, _mode, _show)			\
+	struct device_attribute subsys_attr_##_name = __ATTR(_name, _mode, _show, NULL)
+
+static ssize_t nvme_subsys_show_nqn(struct device *dev,
+				    struct device_attribute *attr,
+				    char *buf)
+{
+	struct nvme_subsystem *subsys =
+		container_of(dev, struct nvme_subsystem, dev);
+
+	return snprintf(buf, PAGE_SIZE, "%s\n", subsys->subnqn);
+}
+static SUBSYS_ATTR_RO(subsysnqn, S_IRUGO, nvme_subsys_show_nqn);
+
+#define nvme_subsys_show_str_function(field)				\
+static ssize_t subsys_##field##_show(struct device *dev,		\
+			    struct device_attribute *attr, char *buf)	\
+{									\
+	struct nvme_subsystem *subsys =					\
+		container_of(dev, struct nvme_subsystem, dev);		\
+	return sprintf(buf, "%.*s\n",					\
+		       (int)sizeof(subsys->field), subsys->field);	\
+}									\
+static SUBSYS_ATTR_RO(field, S_IRUGO, subsys_##field##_show);
+
+nvme_subsys_show_str_function(model);
+nvme_subsys_show_str_function(serial);
+nvme_subsys_show_str_function(firmware_rev);
+
+static struct attribute *nvme_subsys_attrs[] = {
+	&subsys_attr_model.attr,
+	&subsys_attr_serial.attr,
+	&subsys_attr_firmware_rev.attr,
+	&subsys_attr_subsysnqn.attr,
+	NULL,
+};
+
+static struct attribute_group nvme_subsys_attrs_group = {
+	.attrs = nvme_subsys_attrs,
+};
+
+static const struct attribute_group *nvme_subsys_attrs_groups[] = {
+	&nvme_subsys_attrs_group,
+	NULL,
+};
+
 static int nvme_init_subsystem(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id)
 {
 	struct nvme_subsystem *subsys, *found;
@@ -1939,6 +1985,7 @@ static int nvme_init_subsystem(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id)
 
 	subsys->dev.class = nvme_subsys_class;
 	subsys->dev.release = nvme_release_subsystem;
+	subsys->dev.groups = nvme_subsys_attrs_groups;
 	dev_set_name(&subsys->dev, "nvme-subsys%d", subsys->instance);
 	device_initialize(&subsys->dev);
 
Signature · 1 line
1.8.5.6
#5 lore raw

PATCH 2/2 nvme: expose subsys attribute to sysfs

Quoted 3 lines · Hannes Reinecke

We should be exposing the subsystem attributes like 'model' and 'subsysnqn' to sysfs to allow for easier identification of the subsystem.

This looks fine except for an overlong line that I can easily fix up.