Why is this not needed for others as well?
Well, I can only consider nvme case, why it is not needed there, but in
other ULPs that can be probably a bug or they have other protections,
I do not know (seems net/rds/ib.c does nice things).
*_remove_one() callback will be firstly called if device is dying and
only then cm_handler() will get RDMA_CM_EVENT_DEVICE_REMOVAL. Order
matters.
NVMe host and target do flush_scheduled_work() in nvme[t]_rdma_remove_one(),
thus it is guaranteed that *_remove_one() is the last one who puts the
reference on the device, i.e.:
nvmet_rdma_remove_one(...)
{
...
flush_scheduled_work();
WARN_ON(!nvmet_rdma_dev_put(ndev));
}
I think it would be a good idea to do the same for iser.
If you don't have time, keep it as is, I'll try to find some time
to get it incrementally.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html