diff options
author | James Smart <james.smart@broadcom.com> | 2016-08-02 03:42:10 -0400 |
---|---|---|
committer | Sagi Grimberg <sagi@grimberg.me> | 2016-09-23 18:37:37 -0400 |
commit | 478bcb9388f2c3eedba34ed5811793400047f95d (patch) | |
tree | 4b1bc8ad66d638927d6ce70bc3364259fcad613e | |
parent | 4a9f05c57f98e794763650056731a0023ebfab5f (diff) |
nvme-fabrics: Add host_traddr options field to host infrastructure
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>
-rw-r--r-- | drivers/nvme/host/fabrics.c | 13 | ||||
-rw-r--r-- | drivers/nvme/host/fabrics.h | 4 |
2 files changed, 17 insertions, 0 deletions
diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c index 2867b92cbdfb..1c07b76cbdeb 100644 --- a/drivers/nvme/host/fabrics.c +++ b/drivers/nvme/host/fabrics.c | |||
@@ -116,6 +116,9 @@ int nvmf_get_address(struct nvme_ctrl *ctrl, char *buf, int size) | |||
116 | if (ctrl->opts->mask & NVMF_OPT_TRSVCID) | 116 | if (ctrl->opts->mask & NVMF_OPT_TRSVCID) |
117 | len += snprintf(buf + len, size - len, "%strsvcid=%s", | 117 | len += snprintf(buf + len, size - len, "%strsvcid=%s", |
118 | (len) ? "," : "", ctrl->opts->trsvcid); | 118 | (len) ? "," : "", ctrl->opts->trsvcid); |
119 | if (ctrl->opts->mask & NVMF_OPT_HOST_TRADDR) | ||
120 | len += snprintf(buf + len, size - len, "%shost_traddr=%s", | ||
121 | (len) ? "," : "", ctrl->opts->host_traddr); | ||
119 | len += snprintf(buf + len, size - len, "\n"); | 122 | len += snprintf(buf + len, size - len, "\n"); |
120 | 123 | ||
121 | return len; | 124 | return len; |
@@ -518,6 +521,7 @@ static const match_table_t opt_tokens = { | |||
518 | { NVMF_OPT_RECONNECT_DELAY, "reconnect_delay=%d" }, | 521 | { NVMF_OPT_RECONNECT_DELAY, "reconnect_delay=%d" }, |
519 | { NVMF_OPT_KATO, "keep_alive_tmo=%d" }, | 522 | { NVMF_OPT_KATO, "keep_alive_tmo=%d" }, |
520 | { NVMF_OPT_HOSTNQN, "hostnqn=%s" }, | 523 | { NVMF_OPT_HOSTNQN, "hostnqn=%s" }, |
524 | { NVMF_OPT_HOST_TRADDR, "host_traddr=%s" }, | ||
521 | { NVMF_OPT_ERR, NULL } | 525 | { NVMF_OPT_ERR, NULL } |
522 | }; | 526 | }; |
523 | 527 | ||
@@ -674,6 +678,14 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts, | |||
674 | } | 678 | } |
675 | opts->reconnect_delay = token; | 679 | opts->reconnect_delay = token; |
676 | break; | 680 | break; |
681 | case NVMF_OPT_HOST_TRADDR: | ||
682 | p = match_strdup(args); | ||
683 | if (!p) { | ||
684 | ret = -ENOMEM; | ||
685 | goto out; | ||
686 | } | ||
687 | opts->host_traddr = p; | ||
688 | break; | ||
677 | default: | 689 | default: |
678 | pr_warn("unknown parameter or missing value '%s' in ctrl creation request\n", | 690 | pr_warn("unknown parameter or missing value '%s' in ctrl creation request\n", |
679 | p); | 691 | p); |
@@ -740,6 +752,7 @@ void nvmf_free_options(struct nvmf_ctrl_options *opts) | |||
740 | kfree(opts->traddr); | 752 | kfree(opts->traddr); |
741 | kfree(opts->trsvcid); | 753 | kfree(opts->trsvcid); |
742 | kfree(opts->subsysnqn); | 754 | kfree(opts->subsysnqn); |
755 | kfree(opts->host_traddr); | ||
743 | kfree(opts); | 756 | kfree(opts); |
744 | } | 757 | } |
745 | EXPORT_SYMBOL_GPL(nvmf_free_options); | 758 | EXPORT_SYMBOL_GPL(nvmf_free_options); |
diff --git a/drivers/nvme/host/fabrics.h b/drivers/nvme/host/fabrics.h index 2755efde16ac..8f08c3a3406b 100644 --- a/drivers/nvme/host/fabrics.h +++ b/drivers/nvme/host/fabrics.h | |||
@@ -52,6 +52,7 @@ enum { | |||
52 | NVMF_OPT_KATO = 1 << 7, | 52 | NVMF_OPT_KATO = 1 << 7, |
53 | NVMF_OPT_HOSTNQN = 1 << 8, | 53 | NVMF_OPT_HOSTNQN = 1 << 8, |
54 | NVMF_OPT_RECONNECT_DELAY = 1 << 9, | 54 | NVMF_OPT_RECONNECT_DELAY = 1 << 9, |
55 | NVMF_OPT_HOST_TRADDR = 1 << 10, | ||
55 | }; | 56 | }; |
56 | 57 | ||
57 | /** | 58 | /** |
@@ -68,6 +69,8 @@ enum { | |||
68 | * subsystem which is adding a controller. | 69 | * subsystem which is adding a controller. |
69 | * @trsvcid: The transport-specific TRSVCID field for a port on the | 70 | * @trsvcid: The transport-specific TRSVCID field for a port on the |
70 | * subsystem which is adding a controller. | 71 | * subsystem which is adding a controller. |
72 | * @host_traddr: A transport-specific field identifying the NVME host port | ||
73 | * to use for the connection to the controller. | ||
71 | * @queue_size: Number of IO queue elements. | 74 | * @queue_size: Number of IO queue elements. |
72 | * @nr_io_queues: Number of controller IO queues that will be established. | 75 | * @nr_io_queues: Number of controller IO queues that will be established. |
73 | * @reconnect_delay: Time between two consecutive reconnect attempts. | 76 | * @reconnect_delay: Time between two consecutive reconnect attempts. |
@@ -81,6 +84,7 @@ struct nvmf_ctrl_options { | |||
81 | char *subsysnqn; | 84 | char *subsysnqn; |
82 | char *traddr; | 85 | char *traddr; |
83 | char *trsvcid; | 86 | char *trsvcid; |
87 | char *host_traddr; | ||
84 | size_t queue_size; | 88 | size_t queue_size; |
85 | unsigned int nr_io_queues; | 89 | unsigned int nr_io_queues; |
86 | unsigned int reconnect_delay; | 90 | unsigned int reconnect_delay; |