nvme: expose hostnqn via sysfs for fabrics controllers
authorSagi Grimberg <sagi@grimberg.me>
Sat, 8 Feb 2020 01:13:53 +0000 (17:13 -0800)
committerKeith Busch <kbusch@kernel.org>
Wed, 25 Mar 2020 19:44:35 +0000 (04:44 +0900)
We allow userspace to connect with a custom hostnqn which is useful for
certain use-cases. However there is no way to tell what is the hostnqn
used to connect to a given controller.

Expose this so userspace can correlate controllers based on hostnqn.

Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Signed-off-by: Keith Busch <kbusch@kernel.org>
drivers/nvme/host/core.c

index 414076a..4633acc 100644 (file)
@@ -3242,6 +3242,16 @@ static ssize_t nvme_sysfs_show_subsysnqn(struct device *dev,
 }
 static DEVICE_ATTR(subsysnqn, S_IRUGO, nvme_sysfs_show_subsysnqn, NULL);
 
+static ssize_t nvme_sysfs_show_hostnqn(struct device *dev,
+                                       struct device_attribute *attr,
+                                       char *buf)
+{
+       struct nvme_ctrl *ctrl = dev_get_drvdata(dev);
+
+       return snprintf(buf, PAGE_SIZE, "%s\n", ctrl->opts->host->nqn);
+}
+static DEVICE_ATTR(hostnqn, S_IRUGO, nvme_sysfs_show_hostnqn, NULL);
+
 static ssize_t nvme_sysfs_show_address(struct device *dev,
                                         struct device_attribute *attr,
                                         char *buf)
@@ -3267,6 +3277,7 @@ static struct attribute *nvme_dev_attrs[] = {
        &dev_attr_numa_node.attr,
        &dev_attr_queue_count.attr,
        &dev_attr_sqsize.attr,
+       &dev_attr_hostnqn.attr,
        NULL
 };
 
@@ -3280,6 +3291,8 @@ static umode_t nvme_dev_attrs_are_visible(struct kobject *kobj,
                return 0;
        if (a == &dev_attr_address.attr && !ctrl->ops->get_address)
                return 0;
+       if (a == &dev_attr_hostnqn.attr && !ctrl->opts)
+               return 0;
 
        return a->mode;
 }