|
|
@@ -116,6 +116,9 @@ int nvmf_get_address(struct nvme_ctrl *ctrl, char *buf, int size)
|
|
|
if (ctrl->opts->mask & NVMF_OPT_TRSVCID)
|
|
|
len += snprintf(buf + len, size - len, "%strsvcid=%s",
|
|
|
(len) ? "," : "", ctrl->opts->trsvcid);
|
|
|
+ if (ctrl->opts->mask & NVMF_OPT_HOST_TRADDR)
|
|
|
+ len += snprintf(buf + len, size - len, "%shost_traddr=%s",
|
|
|
+ (len) ? "," : "", ctrl->opts->host_traddr);
|
|
|
len += snprintf(buf + len, size - len, "\n");
|
|
|
|
|
|
return len;
|
|
|
@@ -518,6 +521,7 @@ static const match_table_t opt_tokens = {
|
|
|
{ NVMF_OPT_RECONNECT_DELAY, "reconnect_delay=%d" },
|
|
|
{ NVMF_OPT_KATO, "keep_alive_tmo=%d" },
|
|
|
{ NVMF_OPT_HOSTNQN, "hostnqn=%s" },
|
|
|
+ { NVMF_OPT_HOST_TRADDR, "host_traddr=%s" },
|
|
|
{ NVMF_OPT_ERR, NULL }
|
|
|
};
|
|
|
|
|
|
@@ -674,6 +678,14 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts,
|
|
|
}
|
|
|
opts->reconnect_delay = token;
|
|
|
break;
|
|
|
+ case NVMF_OPT_HOST_TRADDR:
|
|
|
+ p = match_strdup(args);
|
|
|
+ if (!p) {
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+ opts->host_traddr = p;
|
|
|
+ break;
|
|
|
default:
|
|
|
pr_warn("unknown parameter or missing value '%s' in ctrl creation request\n",
|
|
|
p);
|
|
|
@@ -740,6 +752,7 @@ void nvmf_free_options(struct nvmf_ctrl_options *opts)
|
|
|
kfree(opts->traddr);
|
|
|
kfree(opts->trsvcid);
|
|
|
kfree(opts->subsysnqn);
|
|
|
+ kfree(opts->host_traddr);
|
|
|
kfree(opts);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(nvmf_free_options);
|