lkml.org 
[lkml]   [2018]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.16 160/272] IB/core: Honor port_num while resolving GID for IB link layer
    Date
    4.16-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Parav Pandit <parav@mellanox.com>

    [ Upstream commit 563c4ba3bd2b8b0b21c65669ec2226b1cfa1138b ]

    ah_attr contains the port number to which cm_id is bound. However, while
    searching for GID table for matching GID entry, the port number is
    ignored.

    This could cause the wrong GID to be used when the ah_attr is converted to
    an AH.

    Reviewed-by: Daniel Jurgens <danielj@mellanox.com>
    Signed-off-by: Parav Pandit <parav@mellanox.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/infiniband/core/multicast.c | 24 +++++++++++-------------
    1 file changed, 11 insertions(+), 13 deletions(-)

    --- a/drivers/infiniband/core/multicast.c
    +++ b/drivers/infiniband/core/multicast.c
    @@ -724,21 +724,19 @@ int ib_init_ah_from_mcmember(struct ib_d
    {
    int ret;
    u16 gid_index;
    - u8 p;

    - if (rdma_protocol_roce(device, port_num)) {
    - ret = ib_find_cached_gid_by_port(device, &rec->port_gid,
    - gid_type, port_num,
    - ndev,
    - &gid_index);
    - } else if (rdma_protocol_ib(device, port_num)) {
    - ret = ib_find_cached_gid(device, &rec->port_gid,
    - IB_GID_TYPE_IB, NULL, &p,
    - &gid_index);
    - } else {
    - ret = -EINVAL;
    - }
    + /* GID table is not based on the netdevice for IB link layer,
    + * so ignore ndev during search.
    + */
    + if (rdma_protocol_ib(device, port_num))
    + ndev = NULL;
    + else if (!rdma_protocol_roce(device, port_num))
    + return -EINVAL;

    + ret = ib_find_cached_gid_by_port(device, &rec->port_gid,
    + gid_type, port_num,
    + ndev,
    + &gid_index);
    if (ret)
    return ret;


    \
     
     \ /
      Last update: 2018-05-28 13:12    [W:4.646 / U:0.208 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site