nvme-fabrics: print out valid arguments when reading from /dev/nvme-fabrics

Currently applications have a hard time figuring out which
nvme-over-fabrics arguments are supported for any given kernel;
the ioctl will return an error code on failure, and the application
has to guess whether this was due to an invalid argument or due
to a connection or controller error.
With this patch applications can read a list of supported
arguments by simply reading from /dev/nvme-fabrics, allowing
them to validate the connection string.

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:
Hannes Reinecke 2021-12-07 14:55:49 +01:00 committed by Christoph Hellwig
parent 3427f2b2c5
commit f18ee3d988

View File

@ -1069,6 +1069,26 @@ out_unlock:
return ret ? ret : count; return ret ? ret : count;
} }
static void __nvmf_concat_opt_tokens(struct seq_file *seq_file)
{
const struct match_token *tok;
int idx;
/*
* Add dummy entries for instance and cntlid to
* signal an invalid/non-existing controller
*/
seq_puts(seq_file, "instance=-1,cntlid=-1");
for (idx = 0; idx < ARRAY_SIZE(opt_tokens); idx++) {
tok = &opt_tokens[idx];
if (tok->token == NVMF_OPT_ERR)
continue;
seq_puts(seq_file, ",");
seq_puts(seq_file, tok->pattern);
}
seq_puts(seq_file, "\n");
}
static int nvmf_dev_show(struct seq_file *seq_file, void *private) static int nvmf_dev_show(struct seq_file *seq_file, void *private)
{ {
struct nvme_ctrl *ctrl; struct nvme_ctrl *ctrl;
@ -1077,7 +1097,7 @@ static int nvmf_dev_show(struct seq_file *seq_file, void *private)
mutex_lock(&nvmf_dev_mutex); mutex_lock(&nvmf_dev_mutex);
ctrl = seq_file->private; ctrl = seq_file->private;
if (!ctrl) { if (!ctrl) {
ret = -EINVAL; __nvmf_concat_opt_tokens(seq_file);
goto out_unlock; goto out_unlock;
} }