Skip to contentSkip to conversation

nvme: expose cntlid in sysfs

PATCH New Ming Lin 5 participants 5 messages Feb 26, 2016 – Feb 29, 2016 NVMe

lore
Share & tools
lore

Ming Lin

author
#0 lore raw

PATCH 1/1 nvme: expose cntlid in sysfs

From: Ming Lin <[email protected]>

For NVMe over Fabrics, the cntlid will be used by systemd/udev to create link to the device, for example,

/dev/disk/by-path/<fabrics-info>-<cntlid>-<namespace> -> /dev/nvme0n1

Signed-off-by Ming Lin <ming.l at ssi.samsung.com>
---
 drivers/nvme/host/core.c | 20 ++++++++++++++++----
 drivers/nvme/host/nvme.h |  1 +
 2 files changed, 17 insertions(+), 4 deletions(-)
drivers/nvme/host/core.c +16 -4
index c7df0ab..0b04119 100644
@@ -901,6 +901,7 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)
 	ctrl->oncs = le16_to_cpup(&id->oncs);
 	atomic_set(&ctrl->abort_limit, id->acl + 1);
 	ctrl->vwc = id->vwc;
+	ctrl->cntlid = le16_to_cpup(&id->cntlid);
 	memcpy(ctrl->serial, id->sn, sizeof(id->sn));
 	memcpy(ctrl->model, id->mn, sizeof(id->mn));
 	memcpy(ctrl->firmware_rev, id->fr, sizeof(id->fr));
@@ -1088,7 +1089,7 @@ static const struct attribute_group nvme_ns_attr_group = {
 	.is_visible	= nvme_attrs_are_visible,
 };
 
-#define nvme_show_function(field)						\
+#define nvme_show_str_function(field)						\
 static ssize_t  field##_show(struct device *dev,				\
 			    struct device_attribute *attr, char *buf)		\
 {										\
@@ -1097,15 +1098,26 @@ static ssize_t  field##_show(struct device *dev,				\
 }										\
 static DEVICE_ATTR(field, S_IRUGO, field##_show, NULL);
 
-nvme_show_function(model);
-nvme_show_function(serial);
-nvme_show_function(firmware_rev);
+#define nvme_show_int_function(field)						\
+static ssize_t  field##_show(struct device *dev,				\
+			    struct device_attribute *attr, char *buf)		\
+{										\
+        struct nvme_ctrl *ctrl = dev_get_drvdata(dev);				\
+        return sprintf(buf, "%d\n", ctrl->field);	\
+}										\
+static DEVICE_ATTR(field, S_IRUGO, field##_show, NULL);
+
+nvme_show_str_function(model);
+nvme_show_str_function(serial);
+nvme_show_str_function(firmware_rev);
+nvme_show_int_function(cntlid);
 
 static struct attribute *nvme_dev_attrs[] = {
 	&dev_attr_reset_controller.attr,
 	&dev_attr_model.attr,
 	&dev_attr_serial.attr,
 	&dev_attr_firmware_rev.attr,
+	&dev_attr_cntlid.attr,
 	NULL
 };
 
drivers/nvme/host/nvme.h +1 -0
index 63ba8a5..2e041e7 100644
@@ -77,6 +77,7 @@ struct nvme_ctrl {
 	char serial[20];
 	char model[40];
 	char firmware_rev[8];
+	int cntlid;
 
 	u32 ctrl_config;
 
Signature · 1 line
1.9.1
#1 lore raw

PATCH 1/1 nvme: expose cntlid in sysfs

Quoted 6 lines · Ming Lin

From: Ming Lin <ming.l at ssi.samsung.com>

For NVMe over Fabrics, the cntlid will be used by systemd/udev to create link to the device, for example,

/dev/disk/by-path/<fabrics-info>-<cntlid>-<namespace> -> /dev/nvme0n1

Looks good. Sounds horrific if I try to pronounce it, but the spec abbreviated "controller" that way!

Reviewed-by Keith Busch <keith.busch at intel.com>
#2 lore raw

PATCH 1/1 nvme: expose cntlid in sysfs

In reply to Ming Lin
Quoted 4 lines · Ming Lin

From: Ming Lin <ming.l at ssi.samsung.com>

For NVMe over Fabrics, the cntlid will be used by systemd/udev to create link to the device, for example,

Looks fine,

Reviewed-by Christoph Hellwig <hch at lst.de>
#4 lore raw

PATCH 1/1 nvme: expose cntlid in sysfs

In reply to Ming Lin
Quoted 6 lines · Ming Lin

From: Ming Lin <ming.l at ssi.samsung.com>

For NVMe over Fabrics, the cntlid will be used by systemd/udev to create link to the device, for example,

/dev/disk/by-path/<fabrics-info>-<cntlid>-<namespace> -> /dev/nvme0n1

Added for 4.6 with the acks, thanks.

Signature · 1 line
Jens Axboe