Commit b059e210 authored by Sagi Grimberg's avatar Sagi Grimberg Committed by Doug Ledford

RDMA/core: make ib_device.add method optional

ib_clients can indeed fill .add to NULL, but then they will not see
any device removal notifications. The reason is that that
ib_register_client and ib_register_device checked existence of .add
before adding the creating a corresponding client_data and adding
it to the list. Simple condition reverse fixes the issue.
Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarSagi Grimberg <sagi@grimberg.me>
Reviewed-by: default avatarLeon Romanovsky <leonro@mellanox.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 836daee2
...@@ -489,7 +489,7 @@ int ib_register_device(struct ib_device *device, ...@@ -489,7 +489,7 @@ int ib_register_device(struct ib_device *device,
device->reg_state = IB_DEV_REGISTERED; device->reg_state = IB_DEV_REGISTERED;
list_for_each_entry(client, &client_list, list) list_for_each_entry(client, &client_list, list)
if (client->add && !add_client_context(device, client)) if (!add_client_context(device, client) && client->add)
client->add(device); client->add(device);
down_write(&lists_rwsem); down_write(&lists_rwsem);
...@@ -577,7 +577,7 @@ int ib_register_client(struct ib_client *client) ...@@ -577,7 +577,7 @@ int ib_register_client(struct ib_client *client)
mutex_lock(&device_mutex); mutex_lock(&device_mutex);
list_for_each_entry(device, &device_list, core_list) list_for_each_entry(device, &device_list, core_list)
if (client->add && !add_client_context(device, client)) if (!add_client_context(device, client) && client->add)
client->add(device); client->add(device);
down_write(&lists_rwsem); down_write(&lists_rwsem);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment