lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 268/563] RDMA/core: Let ib_find_gid() continue search even after empty entry
    Date
    From: Avihai Horon <avihaih@nvidia.com>

    [ Upstream commit 483d805191a23191f8294bbf9b4e94836f5d92e4 ]

    Currently, ib_find_gid() will stop searching after encountering the first
    empty GID table entry. This behavior is wrong since neither IB nor RoCE
    spec enforce tightly packed GID tables.

    For example, when a valid GID entry exists at index N, and if a GID entry
    is empty at index N-1, ib_find_gid() will fail to find the valid entry.

    Fix it by making ib_find_gid() continue searching even after encountering
    missing entries.

    Fixes: 5eb620c81ce3 ("IB/core: Add helpers for uncached GID and P_Key searches")
    Link: https://lore.kernel.org/r/e55d331b96cecfc2cf19803d16e7109ea966882d.1639055490.git.leonro@nvidia.com
    Signed-off-by: Avihai Horon <avihaih@nvidia.com>
    Reviewed-by: Mark Zhang <markzhang@nvidia.com>
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/infiniband/core/device.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
    index 76b9c436edcd2..aa526c5ca0cf3 100644
    --- a/drivers/infiniband/core/device.c
    +++ b/drivers/infiniband/core/device.c
    @@ -2411,7 +2411,8 @@ int ib_find_gid(struct ib_device *device, union ib_gid *gid,
    ++i) {
    ret = rdma_query_gid(device, port, i, &tmp_gid);
    if (ret)
    - return ret;
    + continue;
    +
    if (!memcmp(&tmp_gid, gid, sizeof *gid)) {
    *port_num = port;
    if (index)
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-01-24 21:14    [W:4.023 / U:0.780 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site