Commit 5d4f4ea8 authored by Damien Le Moal's avatar Damien Le Moal Committed by Keith Busch
Browse files

nvmet: Add vendor_id and subsys_vendor_id subsystem attributes



Define the new vendor_id and subsys_vendor_id configfs attribute for
target subsystems. These attributes are respectively reported as the
vid field and as the ssvid field of the identify controller data of
a target controllers using the subsystem for which these attributes
are set.

Signed-off-by: default avatarDamien Le Moal <dlemoal@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Tested-by: default avatarRick Wertenbroek <rick.wertenbroek@gmail.com>
Tested-by: default avatarManivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: default avatarKeith Busch <kbusch@kernel.org>
parent 30e77e0f
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -522,9 +522,8 @@ static void nvmet_execute_identify_ctrl(struct nvmet_req *req)
		goto out;
	}

	/* XXX: figure out how to assign real vendors IDs. */
	id->vid = 0;
	id->ssvid = 0;
	id->vid = cpu_to_le16(subsys->vendor_id);
	id->ssvid = cpu_to_le16(subsys->subsys_vendor_id);

	memcpy(id->sn, ctrl->subsys->serial, NVMET_SN_MAX_SIZE);
	memcpy_and_pad(id->mn, sizeof(id->mn), subsys->model_number,
+45 −0
Original line number Diff line number Diff line
@@ -1412,6 +1412,49 @@ static ssize_t nvmet_subsys_attr_cntlid_max_store(struct config_item *item,
}
CONFIGFS_ATTR(nvmet_subsys_, attr_cntlid_max);

static ssize_t nvmet_subsys_attr_vendor_id_show(struct config_item *item,
		char *page)
{
	return snprintf(page, PAGE_SIZE, "0x%x\n", to_subsys(item)->vendor_id);
}

static ssize_t nvmet_subsys_attr_vendor_id_store(struct config_item *item,
		const char *page, size_t count)
{
	u16 vid;

	if (kstrtou16(page, 0, &vid))
		return -EINVAL;

	down_write(&nvmet_config_sem);
	to_subsys(item)->vendor_id = vid;
	up_write(&nvmet_config_sem);
	return count;
}
CONFIGFS_ATTR(nvmet_subsys_, attr_vendor_id);

static ssize_t nvmet_subsys_attr_subsys_vendor_id_show(struct config_item *item,
		char *page)
{
	return snprintf(page, PAGE_SIZE, "0x%x\n",
			to_subsys(item)->subsys_vendor_id);
}

static ssize_t nvmet_subsys_attr_subsys_vendor_id_store(struct config_item *item,
		const char *page, size_t count)
{
	u16 ssvid;

	if (kstrtou16(page, 0, &ssvid))
		return -EINVAL;

	down_write(&nvmet_config_sem);
	to_subsys(item)->subsys_vendor_id = ssvid;
	up_write(&nvmet_config_sem);
	return count;
}
CONFIGFS_ATTR(nvmet_subsys_, attr_subsys_vendor_id);

static ssize_t nvmet_subsys_attr_model_show(struct config_item *item,
					    char *page)
{
@@ -1640,6 +1683,8 @@ static struct configfs_attribute *nvmet_subsys_attrs[] = {
	&nvmet_subsys_attr_attr_serial,
	&nvmet_subsys_attr_attr_cntlid_min,
	&nvmet_subsys_attr_attr_cntlid_max,
	&nvmet_subsys_attr_attr_vendor_id,
	&nvmet_subsys_attr_attr_subsys_vendor_id,
	&nvmet_subsys_attr_attr_model,
	&nvmet_subsys_attr_attr_qid_max,
	&nvmet_subsys_attr_attr_ieee_oui,
+2 −0
Original line number Diff line number Diff line
@@ -324,6 +324,8 @@ struct nvmet_subsys {
	struct config_group	namespaces_group;
	struct config_group	allowed_hosts_group;

	u16			vendor_id;
	u16			subsys_vendor_id;
	char			*model_number;
	u32			ieee_oui;
	char			*firmware_rev;