Spdk/lib/nvmf
Jim Harris ba6f6c5eb0 nvmf: wait for qpair disconnect cbs when removing subsys
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>
2021-04-14 15:35:08 +00:00
..
ctrlr_bdev.c log: remove internal log.h header 2020-10-15 08:23:39 +00:00
ctrlr_discovery.c nvmf: Async event support for discovery log change 2020-11-11 00:53:57 +00:00
ctrlr.c nvmf: Fix race condition when adding IO qpair 2021-02-18 13:37:01 +00:00
fc_ls.c nvmf/fc: Handle out of order fused commands. 2021-01-14 16:18:25 +00:00
fc.c lib/fc: move to spdk_nvmf_tgt_listen_ext() 2021-03-18 14:43:08 +00:00
Makefile so_ver: increase all major versions 2021-02-05 14:43:47 +00:00
nvmf_fc.h nvmf/fc: Add flag to differentiate LS queue and non LS queue. 2021-01-14 16:18:25 +00:00
nvmf_internal.h nvmf: Subsystem pauses only pause admin queues 2021-01-26 17:38:54 +00:00
nvmf_rpc.c nvmf/rpc: Don't stop listener if it was failed to remove 2021-03-23 10:03:38 +00:00
nvmf.c nvmf: wait for qpair disconnect cbs when removing subsys 2021-04-14 15:35:08 +00:00
rdma.c nvmf: Allow transport specific statistics dumping into JSON 2021-03-19 08:23:01 +00:00
spdk_nvmf.map nvmf: Allow transport specific statistics dumping into JSON 2021-03-19 08:23:01 +00:00
subsystem.c nvmf: Fix bug when subsystem failed to pause 2021-03-31 08:49:55 +00:00
tcp.c nvmf/tcp: use free() to release transport when create fails 2021-04-09 17:13:57 +00:00
transport.c nvmf: call transport abort callback when it's not empty 2021-04-13 08:37:57 +00:00
transport.h nvmf: Allow nvmf_transport_qpair_fini to complete asynchronously. 2020-11-18 11:28:02 +00:00
vfio_user.c nvmf/vfio-user: fix the race condition when creating new connection 2021-04-12 19:33:24 +00:00