Re: [PATCH] cma: resolve to first active IB port

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Dec 6, 2016 at 12:16 PM, Jinpu Wang <jinpu.wang@xxxxxxxxxxxxxxxx> wrote:
> Hi Doug, Sean and Hal,
>
> We have problem when connect connection from second port with AF_IB,
> when first port is down.
> We will fail when resovle route.
>
> It turned out when resolve addr, in cma_resolve_ib_dev, we will choose
> the first port if subnet_prefix is the same, in our case we use
> default well known prefix.
>
> I proposal fix below to resolve to first acrive IB port:
> Note: I will attach another one for easily apply if the format mangled by gmail.
> Patch created based on Linux 4.9-rc7.
>
> From b42e51deb8da3c1b596cb4332b6815e5ac8658a7 Mon Sep 17 00:00:00 2001
> From: Jack Wang <jinpu.wang@xxxxxxxxxxxxxxxx>
> Date: Tue, 6 Dec 2016 09:01:04 +0100
> Subject: [PATCH] cma: resolve to first active ib_port
>
> When resolve addr if we don't give src addr, cma core will try to resolve to
> ib device on itself, current logic is only check if it has same
> subnet_prefix, which is not enough if we use default well known gid,
> we should also check if port is active.
>
> Signed-off-by: Jack Wang <jinpu.wang@xxxxxxxxxxxxxxxx>
> ---
>  drivers/infiniband/core/cma.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
> index 2a6fc47..9e46b42 100644
> --- a/drivers/infiniband/core/cma.c
> +++ b/drivers/infiniband/core/cma.c
> @@ -684,6 +684,8 @@ static int cma_resolve_ib_dev(struct
> rdma_id_private *id_priv)
>              for (i = 0; !ib_get_cached_gid(cur_dev->device, p, i,
>                                 &gid, NULL);
>                   i++) {
> +                struct ib_port_attr attr;
> +
>                  if (!memcmp(&gid, dgid, sizeof(gid))) {
>                      cma_dev = cur_dev;
>                      sgid = gid;
> @@ -692,7 +694,9 @@ static int cma_resolve_ib_dev(struct
> rdma_id_private *id_priv)
>                  }
>
>                  if (!cma_dev && (gid.global.subnet_prefix ==
> -                         dgid->global.subnet_prefix)) {
> +                    dgid->global.subnet_prefix) &&
> +                    (!ib_query_port(cur_dev->device, p, &attr) &&
> +                    attr.state == IB_PORT_ACTIVE)) {
>                      cma_dev = cur_dev;
>                      sgid = gid;
>                      id_priv->id.port_num = p;
> --
> 2.7.4

ping?
-- 
Jinpu Wang
Linux Kernel Developer

ProfitBricks GmbH
Greifswalder Str. 207
D - 10405 Berlin

Tel:       +49 30 577 008  042
Fax:      +49 30 577 008 299
Email:    jinpu.wang@xxxxxxxxxxxxxxxx
URL:      https://www.profitbricks.de

Sitz der Gesellschaft: Berlin
Registergericht: Amtsgericht Charlottenburg, HRB 125506 B
Geschäftsführer: Achim Weiss
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux