[PATCH 1/7] nvmet: make discovery NQN configurable

Himanshu Madhani himanshu.madhani at oracle.com
Wed Sep 22 06:36:18 PDT 2021



> On Sep 22, 2021, at 1:35 AM, Hannes Reinecke <hare at suse.de> wrote:
> 
> TPAR8013 allows for unique discovery NQNs, so make the discovery
> controller NQN configurable by exposing a subsys attribute
> 'discovery_nqn'.
> 
> Signed-off-by: Hannes Reinecke <hare at suse.de>
> ---
> drivers/nvme/target/configfs.c | 39 ++++++++++++++++++++++++++++++++++
> drivers/nvme/target/core.c     |  3 ++-
> 2 files changed, 41 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/nvme/target/configfs.c b/drivers/nvme/target/configfs.c
> index be5d82421e3a..4873564384a3 100644
> --- a/drivers/nvme/target/configfs.c
> +++ b/drivers/nvme/target/configfs.c
> @@ -1233,6 +1233,44 @@ static ssize_t nvmet_subsys_attr_model_store(struct config_item *item,
> }
> CONFIGFS_ATTR(nvmet_subsys_, attr_model);
> 
> +static ssize_t nvmet_subsys_attr_discovery_nqn_show(struct config_item *item,
> +			char *page)
> +{
> +	return snprintf(page, PAGE_SIZE, "%s\n",
> +			nvmet_disc_subsys->subsysnqn);
> +}
> +
> +static ssize_t nvmet_subsys_attr_discovery_nqn_store(struct config_item *item,
> +			const char *page, size_t count)
> +{
> +	struct nvmet_subsys *subsys = to_subsys(item);
> +	char *subsysnqn;
> +	int len;
> +
> +	len = strcspn(page, "\n");
> +	if (!len)
> +		return -EINVAL;
> +
> +	subsysnqn = kmemdup_nul(page, len, GFP_KERNEL);
> +	if (!subsysnqn)
> +		return -ENOMEM;
> +
> +	/*
> +	 * The discovery NQN must be different from subsystem NQN.
> +	 */
> +	if (!strcmp(subsysnqn, subsys->subsysnqn)) {
> +		kfree(subsysnqn);
> +		return -EBUSY;
> +	}
> +	down_write(&nvmet_config_sem);
> +	kfree(nvmet_disc_subsys->subsysnqn);
> +	nvmet_disc_subsys->subsysnqn = subsysnqn;
> +	up_write(&nvmet_config_sem);
> +
> +	return count;
> +}
> +CONFIGFS_ATTR(nvmet_subsys_, attr_discovery_nqn);
> +
> #ifdef CONFIG_BLK_DEV_INTEGRITY
> static ssize_t nvmet_subsys_attr_pi_enable_show(struct config_item *item,
> 						char *page)
> @@ -1262,6 +1300,7 @@ static struct configfs_attribute *nvmet_subsys_attrs[] = {
> 	&nvmet_subsys_attr_attr_cntlid_min,
> 	&nvmet_subsys_attr_attr_cntlid_max,
> 	&nvmet_subsys_attr_attr_model,
> +	&nvmet_subsys_attr_attr_discovery_nqn,
> #ifdef CONFIG_BLK_DEV_INTEGRITY
> 	&nvmet_subsys_attr_attr_pi_enable,
> #endif
> diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
> index b8425fa34300..88ed746c675f 100644
> --- a/drivers/nvme/target/core.c
> +++ b/drivers/nvme/target/core.c
> @@ -1491,7 +1491,8 @@ static struct nvmet_subsys *nvmet_find_get_subsys(struct nvmet_port *port,
> 	if (!port)
> 		return NULL;
> 
> -	if (!strcmp(NVME_DISC_SUBSYS_NAME, subsysnqn)) {
> +	if (!strcmp(NVME_DISC_SUBSYS_NAME, subsysnqn) ||
> +	    !strcmp(nvmet_disc_subsys->subsysnqn, subsysnqn)) {
> 		if (!kref_get_unless_zero(&nvmet_disc_subsys->ref))
> 			return NULL;
> 		return nvmet_disc_subsys;
> -- 
> 2.29.2
> 
> 
> _______________________________________________
> Linux-nvme mailing list
> Linux-nvme at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-nvme

Aah .. .did not see this updated version in my inbox while reviewing …

Reviewed-by: Himanshu Madhani <himanshu.madhani at oracle.com>

--
Himanshu Madhani	 Oracle Linux Engineering



More information about the Linux-nvme mailing list