nvme: expose subsystem type in sysfs attribute 'subsystype'
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 'subsystype'. Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
d3aef70124
commit
954ae16681
|
@ -2620,6 +2620,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_type(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(subsystype, S_IRUGO, nvme_subsys_show_type);
|
||||
|
||||
#define nvme_subsys_show_str_function(field) \
|
||||
static ssize_t subsys_##field##_show(struct device *dev, \
|
||||
struct device_attribute *attr, char *buf) \
|
||||
|
@ -2640,6 +2658,7 @@ static struct attribute *nvme_subsys_attrs[] = {
|
|||
&subsys_attr_serial.attr,
|
||||
&subsys_attr_firmware_rev.attr,
|
||||
&subsys_attr_subsysnqn.attr,
|
||||
&subsys_attr_subsystype.attr,
|
||||
#ifdef CONFIG_NVME_MULTIPATH
|
||||
&subsys_attr_iopolicy.attr,
|
||||
#endif
|
||||
|
@ -2710,6 +2729,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;
|
||||
|
|
|
@ -372,6 +372,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;
|
||||
|
|
Loading…
Reference in New Issue