nvme-fabrics: Add host_traddr options field to host infrastructure
authorJames Smart <james.smart@broadcom.com>
Tue, 2 Aug 2016 07:42:10 +0000 (10:42 +0300)
committerSagi Grimberg <sagi@grimberg.me>
Fri, 23 Sep 2016 22:37:37 +0000 (15:37 -0700)
Add the host_traddr field to allow specification of the host-port
connection info for the transport. Will be used by FC transport.

Signed-off-by: James Smart <james.smart@broadcom.com>
Acked-by: Johannes Thumshirn <jth@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
drivers/nvme/host/fabrics.c
drivers/nvme/host/fabrics.h

index 2867b92cbdfba16d48b732808bdda91d10105da5..1c07b76cbdeb8edb32d7c2cf72a19b367464f302 100644 (file)
@@ -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);
index 2755efde16ac1e7c78fb28debb8a0dc20c5a0cca..8f08c3a3406b04bc18d368bb9587eac0bc809152 100644 (file)
@@ -52,6 +52,7 @@ enum {
        NVMF_OPT_KATO           = 1 << 7,
        NVMF_OPT_HOSTNQN        = 1 << 8,
        NVMF_OPT_RECONNECT_DELAY = 1 << 9,
+       NVMF_OPT_HOST_TRADDR    = 1 << 10,
 };
 
 /**
@@ -68,6 +69,8 @@ enum {
  *              subsystem which is adding a controller.
  * @trsvcid:   The transport-specific TRSVCID field for a port on the
  *              subsystem which is adding a controller.
+ * @host_traddr: A transport-specific field identifying the NVME host port
+ *              to use for the connection to the controller.
  * @queue_size: Number of IO queue elements.
  * @nr_io_queues: Number of controller IO queues that will be established.
  * @reconnect_delay: Time between two consecutive reconnect attempts.
@@ -81,6 +84,7 @@ struct nvmf_ctrl_options {
        char                    *subsysnqn;
        char                    *traddr;
        char                    *trsvcid;
+       char                    *host_traddr;
        size_t                  queue_size;
        unsigned int            nr_io_queues;
        unsigned int            reconnect_delay;