|
@@ -548,6 +548,7 @@ static const match_table_t opt_tokens = {
|
|
|
{ NVMF_OPT_HOSTNQN, "hostnqn=%s" },
|
|
|
{ NVMF_OPT_HOST_TRADDR, "host_traddr=%s" },
|
|
|
{ NVMF_OPT_HOST_ID, "hostid=%s" },
|
|
|
+ { NVMF_OPT_DUP_CONNECT, "duplicate_connect" },
|
|
|
{ NVMF_OPT_ERR, NULL }
|
|
|
};
|
|
|
|
|
@@ -566,6 +567,7 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts,
|
|
|
opts->nr_io_queues = num_online_cpus();
|
|
|
opts->reconnect_delay = NVMF_DEF_RECONNECT_DELAY;
|
|
|
opts->kato = NVME_DEFAULT_KATO;
|
|
|
+ opts->duplicate_connect = false;
|
|
|
|
|
|
options = o = kstrdup(buf, GFP_KERNEL);
|
|
|
if (!options)
|
|
@@ -742,6 +744,9 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts,
|
|
|
goto out;
|
|
|
}
|
|
|
break;
|
|
|
+ case NVMF_OPT_DUP_CONNECT:
|
|
|
+ opts->duplicate_connect = true;
|
|
|
+ break;
|
|
|
default:
|
|
|
pr_warn("unknown parameter or missing value '%s' in ctrl creation request\n",
|
|
|
p);
|
|
@@ -823,7 +828,7 @@ EXPORT_SYMBOL_GPL(nvmf_free_options);
|
|
|
#define NVMF_REQUIRED_OPTS (NVMF_OPT_TRANSPORT | NVMF_OPT_NQN)
|
|
|
#define NVMF_ALLOWED_OPTS (NVMF_OPT_QUEUE_SIZE | NVMF_OPT_NR_IO_QUEUES | \
|
|
|
NVMF_OPT_KATO | NVMF_OPT_HOSTNQN | \
|
|
|
- NVMF_OPT_HOST_ID)
|
|
|
+ NVMF_OPT_HOST_ID | NVMF_OPT_DUP_CONNECT)
|
|
|
|
|
|
static struct nvme_ctrl *
|
|
|
nvmf_create_ctrl(struct device *dev, const char *buf, size_t count)
|