]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/core: Use kzalloc_flex for GID table
authorRosen Penev <rosenp@gmail.com>
Fri, 27 Mar 2026 03:01:24 +0000 (20:01 -0700)
committerLeon Romanovsky <leon@kernel.org>
Mon, 30 Mar 2026 17:47:45 +0000 (13:47 -0400)
Simplifies allocations by using a flexible array member in struct ib_gid_table.

Add __counted_by to get extra runtime analysis.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://patch.msgid.link/20260327030124.8385-1-rosenp@gmail.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/core/cache.c

index ee4a2bc68fb260555c9dd2e8fab76b510849203d..896486fa6185833e4b470e9d18501a3b116211fd 100644 (file)
@@ -116,9 +116,9 @@ struct ib_gid_table {
        /* rwlock protects data_vec[ix]->state and entry pointer.
         */
        rwlock_t                        rwlock;
-       struct ib_gid_table_entry       **data_vec;
        /* bit field, each bit indicates the index of default GID */
        u32                             default_gid_indices;
+       struct ib_gid_table_entry       *data_vec[] __counted_by(sz);
 };
 
 static void dispatch_gid_change_event(struct ib_device *ib_dev, u32 port)
@@ -770,24 +770,16 @@ const struct ib_gid_attr *rdma_find_gid_by_filter(
 
 static struct ib_gid_table *alloc_gid_table(int sz)
 {
-       struct ib_gid_table *table = kzalloc_obj(*table);
+       struct ib_gid_table *table = kzalloc_flex(*table, data_vec, sz);
 
        if (!table)
                return NULL;
 
-       table->data_vec = kzalloc_objs(*table->data_vec, sz);
-       if (!table->data_vec)
-               goto err_free_table;
+       table->sz = sz;
 
        mutex_init(&table->lock);
-
-       table->sz = sz;
        rwlock_init(&table->rwlock);
        return table;
-
-err_free_table:
-       kfree(table);
-       return NULL;
 }
 
 static void release_gid_table(struct ib_device *device,