Currently there seems to be a problem when an RDMA listener or connection is active on an ib_device. 'rmmod rdma_rxe' (the same for 'siw' and most likely all others) just hangs like this until shutdown the listeners and connections: [<0>] remove_client_context+0x97/0xe0 [ib_core] [<0>] disable_device+0x90/0x120 [ib_core] [<0>] __ib_unregister_device+0x41/0xa0 [ib_core] [<0>] ib_unregister_driver+0xbb/0x100 [ib_core] [<0>] rxe_module_exit+0x1a/0x8aa [rdma_rxe] [<0>] __x64_sys_delete_module+0x147/0x290 [<0>] do_syscall_64+0x5a/0x130 [<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9 The following would be expected: rmmod: ERROR: Module rdma_rxe is in use And this change provides that. Once all add listeners and connections are gone the module can be removed again. Signed-off-by: Stefan Metzmacher <metze@xxxxxxxxx> Cc: stable@xxxxxxxxxxxxxxx --- drivers/infiniband/core/cma.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index a68d0ccf67a4..d10f3d01fa02 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c @@ -276,6 +276,7 @@ enum { void cma_ref_dev(struct cma_device *cma_dev) { atomic_inc(&cma_dev->refcount); + __module_get(cma_dev->device->ops.owner); } struct cma_device *cma_enum_devices_by_ibdev(cma_device_filter filter, @@ -512,6 +513,7 @@ static void cma_attach_to_dev(struct rdma_id_private *id_priv, void cma_deref_dev(struct cma_device *cma_dev) { + module_put(cma_dev->device->ops.owner); if (atomic_dec_and_test(&cma_dev->refcount)) complete(&cma_dev->comp); } -- 2.17.1