+22
−39
Loading
When we iterate qpairs that belong to a subsystem and try to disconnect them, there is a chance that some qpair can be disconnected on transport level, e.g. the initiator may receive a disconnect for the first qpair and disconnect others. That may lead to a dead loop when we call spdk_nvmf_qpair_disconnect with a callback, the callback is called immediatelly and tries to disconnect the qpair again. To solve this problem, move part of nvmf_poll_group_remove_subsystem function to another function nvmf_poll_group_remove_subsystem_msg which disconnects all qpair at once without any callback and calls itself via thread_send_msg untill all qpairs are disconnected. Fixes github issue #1780 Change-Id: I1000cda73e6164917fc13f7f374366af90571b99 Signed-off-by:Alexey Marchuk <alexeymar@mellanox.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6597 Community-CI: Broadcom CI Tested-by:
SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by:
Changpeng Liu <changpeng.liu@intel.com> Reviewed-by:
<dongx.yi@intel.com> Reviewed-by:
Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>