[PATCH nvme-7.3 3/4] nvme-fabrics: add helpers for subsystem and host identity options

Sagi Grimberg sagi at grimberg.me
Sat Aug 22 15:11:56 PDT 2026



On 21/08/2026 9:25, raoxu wrote:
> From: Xu Rao <raoxu at uniontech.com>
>
> The nqn, hostnqn and hostid options also start with match_strdup(), but
> unlike the direct string replacements handled by nvmf_parse_string_option()
> they perform option-specific validation or conversion before parsing is
> complete.

Does this warrant that they get a special handler? I am not sure I see 
how this helps.

>
> Move each lifetime into a helper whose name identifies the value being
> parsed:
>
>    nvmf_parse_subsysnqn() handles NVMF_OPT_NQN.  It replaces
>    opts->subsysnqn, checks NVMF_NQN_SIZE and updates discovery_nqn.  Using
>    subsysnqn in the helper name distinguishes the subsystem NQN from the
>    host NQN at the call site.
>
>    nvmf_parse_hostnqn() handles the hostnqn option.  It keeps the existing
>    host-assignment check, validates the temporary NQN, copies it to the
>    hostnqn buffer and frees the temporary allocation before returning.
>
>    nvmf_parse_hostid() handles the hostid option.  It converts the temporary
>    string to uuid_t and frees the duplicated string on both success and
>    failure paths.
>
> These three helpers are grouped because they parse non-sensitive identity
> values that require validation or conversion rather than a simple owned
> string replacement.  Preserve the existing validation and ownership
> ordering while moving the code.
>
> No functional change is intended.
>
> Suggested-by: Christoph Hellwig <hch at lst.de>
> Signed-off-by: Xu Rao <raoxu at uniontech.com>
> ---
>   drivers/nvme/host/fabrics.c | 118 +++++++++++++++++++++---------------
>   1 file changed, 69 insertions(+), 49 deletions(-)
>
> diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c
> index aab3fd279d0e..120e57964cdd 100644
> --- a/drivers/nvme/host/fabrics.c
> +++ b/drivers/nvme/host/fabrics.c
> @@ -725,13 +725,75 @@ static int nvmf_parse_string_option(substring_t *args, char **dst)
>   	return 0;
>   }
>   
> +static int nvmf_parse_subsysnqn(struct nvmf_ctrl_options *opts, substring_t *args)
> +{
> +	char *nqn;
> +
> +	nqn = match_strdup(args);
> +	if (!nqn)
> +		return -ENOMEM;
> +
> +	kfree(opts->subsysnqn);
> +	opts->subsysnqn = nqn;

The above is nvmf_parse_string_option() no?
> +	if (strlen(opts->subsysnqn) >= NVMF_NQN_SIZE) {
> +		pr_err("%s needs to be < %d bytes\n",
> +		       opts->subsysnqn, NVMF_NQN_SIZE);
> +		return -EINVAL;
> +	}
> +
> +	opts->discovery_nqn = !strcmp(opts->subsysnqn, NVME_DISC_SUBSYS_NAME);

Not sure that this helper existence is really needed, but ok.



More information about the Linux-nvme mailing list