On Thu, 2016-07-28 at 00:45 +0530, Raju Rangoju wrote:
When the low level driver exercises the hot unplug they would call
rdma_cm cma_remove_one which would fire DEVICE_REMOVAL event to all
cma
consumers. Now, if consumer doesn't make sure they destroy all IB
objects created on that IB device instance prior to finalizing all
processing of DEVICE_REMOVAL callback, rdma_cm will let the lld to
de-register with IB core and destroy the IB device instance. And if
the
consumer calls (say) ib_dereg_mr(), it will crash since that dev
object
is NULL.
In the current implementation, iser-target just initiates the cleanup
and returns from DEVICE_REMOVAL callback. This deferred work creates
a
race between iser-target cleaning IB objects(say MR) and lld
destroying
IB device instance.
This patch includes the following fixes
-> make sure that consumer frees all IB objects associated with
device
instance
-> return non-zero from the callback to destroy the rdma_cm id
This patch is missing a Signed-off-by: line and can not be accepted as
it is. Please resubmit with the proper attribution. Also please
reword your commit subject as it's too long. I suggest something like:
IB/isert: Properly release resources on RDMA_CM_EVENT_DEVICE_REMOVAL
which is still too long, but not as bad as what you have now.
--
Doug Ledford [off-list ref]
GPG KeyID: 0E572FDD