Message ID | 43f8d94766597cc2fa7f1c2e3f81a1b558f59128.1637581778.git.leonro@nvidia.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Jason Gunthorpe |
Headers | show |
Series | Skip holes in GID tables | expand |
On Mon, Nov 22, 2021 at 01:53:56PM +0200, Leon Romanovsky wrote: > From: Avihai Horon <avihaih@nvidia.com> > > Modify rdma_query_gid() to return -ENOENT for empty entries. This will > make error reporting more accurate and will be used in next patches. > > Signed-off-by: Avihai Horon <avihaih@nvidia.com> > Reviewed-by: Mark Zhang <markzhang@nvidia.com> > Signed-off-by: Leon Romanovsky <leonro@nvidia.com> > drivers/infiniband/core/cache.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c > index 0c98dd3dee67..dd66f1a6e792 100644 > +++ b/drivers/infiniband/core/cache.c > @@ -963,9 +963,13 @@ 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) > + goto done; > + > + if (!is_gid_entry_valid(table->data_vec[index])) { > + res = -ENOENT; > goto done; > + } Please get rid of the default assignment to res so this code is all consistent @@ -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; + } Jason
diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c index 0c98dd3dee67..dd66f1a6e792 100644 --- a/drivers/infiniband/core/cache.c +++ b/drivers/infiniband/core/cache.c @@ -963,9 +963,13 @@ 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) + 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;