RDMA/core: Change rdma_get_gid_attr returned error code
authorAvihai Horon <avihaih@nvidia.com>
Wed, 23 Sep 2020 16:50:12 +0000 (19:50 +0300)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 2 Oct 2020 00:20:11 +0000 (21:20 -0300)
Change the error code returned from rdma_get_gid_attr when the GID entry
is invalid but the GID index is in the gid table size range to -ENODATA
instead of -EINVAL.

This change is done in order to provide a more accurate error reporting to
be used by the new GID query API in user space. Nevertheless, -EINVAL is
still returned from sysfs in the aforementioned case to maintain
compatibility with user space that expects -EINVAL.

Link: https://lore.kernel.org/r/20200923165015.2491894-2-leon@kernel.org
Signed-off-by: Avihai Horon <avihaih@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/core/cache.c
drivers/infiniband/core/sysfs.c

index ffad73bb40ff1dba53f65555c5e1fb1f3647a2c1..6079f1f7e67834dd44fe06ec025b0e466d87fb3d 100644 (file)
@@ -1220,7 +1220,7 @@ EXPORT_SYMBOL(ib_get_cached_port_state);
 const struct ib_gid_attr *
 rdma_get_gid_attr(struct ib_device *device, u8 port_num, int index)
 {
-       const struct ib_gid_attr *attr = ERR_PTR(-EINVAL);
+       const struct ib_gid_attr *attr = ERR_PTR(-ENODATA);
        struct ib_gid_table *table;
        unsigned long flags;
 
index 453d1c451ed5b88b7b482b04f2e858fc1c92c054..914cddea525df14f2880083e226b713279beabf4 100644 (file)
@@ -387,7 +387,8 @@ static ssize_t _show_port_gid_attr(
 
        gid_attr = rdma_get_gid_attr(p->ibdev, p->port_num, tab_attr->index);
        if (IS_ERR(gid_attr))
-               return PTR_ERR(gid_attr);
+               /* -EINVAL is returned for user space compatibility reasons. */
+               return -EINVAL;
 
        ret = print(gid_attr, buf);
        rdma_put_gid_attr(gid_attr);