diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c index 140fd351764d..f0887f29da97 100644 --- a/drivers/infiniband/core/cache.c +++ b/drivers/infiniband/core/cache.c @@ -778,39 +778,6 @@ static void gid_table_reserve_default(struct ib_device *ib_dev, u8 port, } } -static int _gid_table_setup_one(struct ib_device *ib_dev) -{ - u8 port; - struct ib_gid_table *table; - int err = 0; - - for (port = 0; port < ib_dev->phys_port_cnt; port++) { - u8 rdma_port = port + rdma_start_port(ib_dev); - - table = alloc_gid_table( - ib_dev->port_immutable[rdma_port].gid_tbl_len); - if (!table) { - err = -ENOMEM; - goto rollback_table_setup; - } - - gid_table_reserve_default(ib_dev, rdma_port, table); - ib_dev->cache.ports[port].gid = table; - } - - return 0; - -rollback_table_setup: - for (port = 0; port < ib_dev->phys_port_cnt; port++) { - table = ib_dev->cache.ports[port].gid; - - cleanup_gid_table_port(ib_dev, port + rdma_start_port(ib_dev), - table); - release_gid_table(table); - } - - return err; -} static void gid_table_release_one(struct ib_device *ib_dev) { @@ -824,6 +791,29 @@ static void gid_table_release_one(struct ib_device *ib_dev) } } +static int _gid_table_setup_one(struct ib_device *ib_dev) +{ + u8 port; + struct ib_gid_table *table; + + for (port = 0; port < ib_dev->phys_port_cnt; port++) { + u8 rdma_port = port + rdma_start_port(ib_dev); + + table = alloc_gid_table( + ib_dev->port_immutable[rdma_port].gid_tbl_len); + if (!table) + goto rollback_table_setup; + + gid_table_reserve_default(ib_dev, rdma_port, table); + ib_dev->cache.ports[port].gid = table; + } + return 0; + +rollback_table_setup: + gid_table_release_one(ib_dev); + return -ENOMEM; +} + static void gid_table_cleanup_one(struct ib_device *ib_dev) { struct ib_gid_table *table;