+23
−9
Loading
nvmf_poll_group_remove_subsystem_msg() disconnects all qpairs associated with controllers in the specified subsystem. If it finds any controllers that need to be disconnected, it sends a message to the running thread to execute the same function again later. But when it runs again later, the qpair may no longer be in the poll group, but there could still be outstanding messages being sent between threads. For example, _nvmf_qpair_destroy() needs to send a message to the ctrlr->thread to clear the qpair mask bit. All of this could result in the nvmf target starting to destroy poll groups prematurely. Destroy poll groups results in the nvmf spdk_threads exiting. If there are still messages being processed from the STOP_SUBSYSTEMS target state, we can get use-after-free errors since processing of those messages could access freed memory associated with the exited thread. Fixes issue #1850. Signed-off-by:Jim Harris <james.r.harris@intel.com> Change-Id: I1e63b9addb2956495a69b5108a41e029f6f9a85d Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7275 Community-CI: Broadcom CI Tested-by:
SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by:
Changpeng Liu <changpeng.liu@intel.com> Reviewed-by:
Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by:
<dongx.yi@intel.com> Reviewed-by:
Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>