Merge branch 'for-4.9/block' of git://git.kernel.dk/linux-block
[platform/kernel/linux-exynos.git] / drivers / nvme / host / fabrics.c
index 4eff491..5a3f008 100644 (file)
@@ -111,8 +111,19 @@ static void nvmf_host_put(struct nvmf_host *host)
  */
 int nvmf_get_address(struct nvme_ctrl *ctrl, char *buf, int size)
 {
-       return snprintf(buf, size, "traddr=%s,trsvcid=%s\n",
-                       ctrl->opts->traddr, ctrl->opts->trsvcid);
+       int len = 0;
+
+       if (ctrl->opts->mask & NVMF_OPT_TRADDR)
+               len += snprintf(buf, size, "traddr=%s", ctrl->opts->traddr);
+       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;
 }
 EXPORT_SYMBOL_GPL(nvmf_get_address);
 
@@ -519,6 +530,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                    }
 };
 
@@ -675,6 +687,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);
@@ -741,6 +761,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);