[PATCH 4/6] nvme: expose subsystem type in sysfs attribute 'subtype'
Himanshu Madhani
himanshu.madhani at oracle.com
Wed Sep 22 06:34:13 PDT 2021
> On Sep 21, 2021, at 10:15 AM, Hannes Reinecke <hare at suse.de> wrote:
>
> With unique discovery controller NQNs we cannot distinguish the
> subsystem type by the NQN alone, but need to check the subsystem
> type, too.
> So expose the subsystem type in a new sysfs attribute 'subtype'.
>
> Signed-off-by: Hannes Reinecke <hare at suse.de>
> ---
> drivers/nvme/host/core.c | 27 +++++++++++++++++++++++++++
> drivers/nvme/host/nvme.h | 1 +
> 2 files changed, 28 insertions(+)
>
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index e486845d2c7e..1ed1b7be2812 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -2598,6 +2598,24 @@ static ssize_t nvme_subsys_show_nqn(struct device *dev,
> }
> static SUBSYS_ATTR_RO(subsysnqn, S_IRUGO, nvme_subsys_show_nqn);
>
> +static ssize_t nvme_subsys_show_subtype(struct device *dev,
> + struct device_attribute *attr,
> + char *buf)
> +{
> + struct nvme_subsystem *subsys =
> + container_of(dev, struct nvme_subsystem, dev);
> +
> + switch (subsys->subtype) {
> + case NVME_NQN_DISC:
> + return sysfs_emit(buf, "discovery\n");
> + case NVME_NQN_NVME:
> + return sysfs_emit(buf, "nvm\n");
> + default:
> + return sysfs_emit(buf, "reserved\n");
> + }
> +}
> +static SUBSYS_ATTR_RO(subtype, S_IRUGO, nvme_subsys_show_subtype);
> +
> #define nvme_subsys_show_str_function(field) \
> static ssize_t subsys_##field##_show(struct device *dev, \
> struct device_attribute *attr, char *buf) \
> @@ -2618,6 +2636,7 @@ static struct attribute *nvme_subsys_attrs[] = {
> &subsys_attr_serial.attr,
> &subsys_attr_firmware_rev.attr,
> &subsys_attr_subsysnqn.attr,
> + &subsys_attr_subtype.attr,
> #ifdef CONFIG_NVME_MULTIPATH
> &subsys_attr_iopolicy.attr,
> #endif
> @@ -2688,6 +2707,14 @@ static int nvme_init_subsystem(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id)
> memcpy(subsys->firmware_rev, id->fr, sizeof(subsys->firmware_rev));
> subsys->vendor_id = le16_to_cpu(id->vid);
> subsys->cmic = id->cmic;
> +
> + /* Versions prior to 1.4 don't necessarily report a valid type */
> + if (id->cntrltype == NVME_CTRL_DISC ||
> + !strcmp(subsys->subnqn, NVME_DISC_SUBSYS_NAME))
> + subsys->subtype = NVME_NQN_DISC;
> + else
> + subsys->subtype = NVME_NQN_NVME;
> +
> subsys->awupf = le16_to_cpu(id->awupf);
> #ifdef CONFIG_NVME_MULTIPATH
> subsys->iopolicy = NVME_IOPOLICY_NUMA;
> diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
> index 9871c0c9374c..2c7a77f600f8 100644
> --- a/drivers/nvme/host/nvme.h
> +++ b/drivers/nvme/host/nvme.h
> @@ -366,6 +366,7 @@ struct nvme_subsystem {
> char model[40];
> char firmware_rev[8];
> u8 cmic;
> + enum nvme_subsys_type subtype;
> u16 vendor_id;
> u16 awupf; /* 0's based awupf value. */
> struct ida ns_ida;
> --
> 2.29.2
>
>
> _______________________________________________
> Linux-nvme mailing list
> Linux-nvme at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-nvme
Looks Good.
Reviewed-by: Himanshu Madhani <himanshu.madhani at oracle.com>
--
Himanshu Madhani Oracle Linux Engineering
More information about the Linux-nvme
mailing list