When a subsystem is being deleted, we disconnect all qpairs and when the last qpair for some controller is disconnected, we start controller desctruction process. This process requires to send a message to subsystem's thread to remove the controller from the list in the subsystem and after that send a message to controller's thread to release resources. The problem is that the subsystem also destroys all attached controllers. This order is unpredictable and we may get heap-use-after-free or double free. To fix this problem we can rely on the fact that the subsystem can only be destroyed in incative state, that means that all qpairs linked to the subsystem are already disconnected and all controllers are already destroyed or in the process of destruction. spdk_nvmf_subsystem_destroy API is now can be asyncrhonous, it accepts a callback with cb argument. Change-Id: Ic72d69200bc8302dae2f8cd8ca44bc640c6a8116 Signed-off-by: Alexey Marchuk <alexeymar@mellanox.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6660 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Community-CI: Mellanox Build Bot Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> |
||
---|---|---|
.. | ||
Makefile | ||
subsystem_ut.c |