nvmet-rdma: Correctly handle RDMA device hot removal
authorSagi Grimberg <sagi@grimberg.me>
Thu, 19 May 2016 12:24:55 +0000 (15:24 +0300)
committerSagi Grimberg <sagi@grimberg.me>
Thu, 4 Aug 2016 14:43:06 +0000 (17:43 +0300)
commitd8f7750a08968b105056328652d2c332bdfa062d
tree8932ca6a801f85efffeb7825163e7627c139a978
parent45862ebcc4883b1b6bc0701cd15cb2b68b140c5d
nvmet-rdma: Correctly handle RDMA device hot removal

When configuring a device attached listener, we may
see device removal events. In this case we return a
non-zero return code from the cm event handler which
implicitly destroys the cm_id. It is possible that in
the future the user will remove this listener and by
that trigger a second call to rdma_destroy_id on an
already destroyed cm_id -> BUG.

In addition, when a queue bound (active session) cm_id
generates a DEVICE_REMOVAL event we must guarantee all
resources are cleaned up by the time we return from the
event handler.

Introduce nvmet_rdma_device_removal which addresses
(or at least attempts to) both scenarios.

Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/target/rdma.c