[PATCH 1/1] nvme-rdma: add support for host_traddr
Christoph Hellwig
hch at infradead.org
Sun Feb 19 09:17:02 PST 2017
On Thu, Feb 16, 2017 at 06:51:33PM +0200, Max Gurtovoy wrote:
> This will enable the user to control the specific interface for
> connection establishment in case the host has more than 1 interface
> under the same subnet.
> E.g:
> Host interfaces configured as:
> - ib0 1.1.1.1/16
> - ib1 1.1.1.2/16
>
> Target interfaces configured as:
> - ib0 1.1.1.3/16 (listener interface)
> - ib1 1.1.1.4/16
>
> the following connect command will go through host iface ib0 (default):
> nvme connect -t rdma -n testsubsystem -a 1.1.1.3 -s 1023
>
> but the following command will go through host iface ib1:
> nvme connect -t rdma -n testsubsystem -a 1.1.1.3 -s 1023 -w 1.1.1.2
>
> Signed-off-by: Max Gurtovoy <maxg at mellanox.com>
> Reviewed-by: Parav Pandit <parav at mellanox.com>
> ---
> drivers/nvme/host/rdma.c | 21 +++++++++++++++++++--
> 1 files changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
> index 3d25add..36b8253 100644
> --- a/drivers/nvme/host/rdma.c
> +++ b/drivers/nvme/host/rdma.c
> @@ -133,6 +133,10 @@ struct nvme_rdma_ctrl {
> struct sockaddr addr;
> struct sockaddr_in addr_in;
> };
> + union {
> + struct sockaddr src_addr;
> + struct sockaddr_in src_addr_in;
> + };
>
> struct nvme_ctrl ctrl;
> };
> @@ -543,6 +547,7 @@ static int nvme_rdma_init_queue(struct nvme_rdma_ctrl *ctrl,
> int idx, size_t queue_size)
> {
> struct nvme_rdma_queue *queue;
> + struct sockaddr *src_addr = NULL;
> int ret;
>
> queue = &ctrl->queues[idx];
> @@ -565,7 +570,10 @@ static int nvme_rdma_init_queue(struct nvme_rdma_ctrl *ctrl,
> }
>
> queue->cm_error = -ETIMEDOUT;
> - ret = rdma_resolve_addr(queue->cm_id, NULL, &ctrl->addr,
> + if (ctrl->ctrl.opts->mask & NVMF_OPT_HOST_TRADDR)
> + src_addr = &ctrl->src_addr;
> +
> + ret = rdma_resolve_addr(queue->cm_id, src_addr, &ctrl->addr,
> NVME_RDMA_CONNECT_TIMEOUT_MS);
> if (ret) {
> dev_info(ctrl->ctrl.device,
> @@ -1885,6 +1893,14 @@ static struct nvme_ctrl *nvme_rdma_create_ctrl(struct device *dev,
> goto out_free_ctrl;
> }
>
> + if (opts->mask & NVMF_OPT_HOST_TRADDR) {
> + ret = nvme_rdma_parse_ipaddr(&ctrl->src_addr_in, opts->host_traddr);
> + if (ret) {
> + pr_err("malformed src IP address passed: %s\n", opts->host_traddr);
Please break these lines after 80 characters.
Otherwise looks fine:
Reviewed-by: Christoph Hellwig <hch at lst.de>
More information about the Linux-nvme
mailing list