RDMA/core: Modify rdma_query_gid() to return accurate error codes
authorAvihai Horon <avihaih@nvidia.com>
Thu, 9 Dec 2021 13:16:05 +0000 (15:16 +0200)
committerJason Gunthorpe <jgg@nvidia.com>
Wed, 15 Dec 2021 00:09:50 +0000 (20:09 -0400)
Modify rdma_query_gid() to return -ENOENT for empty entries. This will
make error reporting more accurate and will be used in next patches.

Link: https://lore.kernel.org/r/1f2b65dfb4d995e74b621e3e21e7c7445d187956.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>
drivers/infiniband/core/cache.c

index 0c98dd3dee67832b33383bf5782ada595643dbee..9194a23cf8590caf34c4bf79a6ed1caf973d842b 100644 (file)
@@ -955,7 +955,7 @@ int rdma_query_gid(struct ib_device *device, u32 port_num,
 {
        struct ib_gid_table *table;
        unsigned long flags;
-       int res = -EINVAL;
+       int res;
 
        if (!rdma_is_port_valid(device, port_num))
                return -EINVAL;
@@ -963,9 +963,15 @@ int rdma_query_gid(struct ib_device *device, u32 port_num,
        table = rdma_gid_table(device, port_num);
        read_lock_irqsave(&table->rwlock, flags);
 
-       if (index < 0 || index >= table->sz ||
-           !is_gid_entry_valid(table->data_vec[index]))
+       if (index < 0 || index >= table->sz) {
+               res = -EINVAL;
                goto done;
+       }
+
+       if (!is_gid_entry_valid(table->data_vec[index])) {
+               res = -ENOENT;
+               goto done;
+       }
 
        memcpy(gid, &table->data_vec[index]->attr.gid, sizeof(*gid));
        res = 0;