Spdk/lib/nvmf
Michael Haeuptle 43ad7febb2 lib/nvmf: Fixes stuck subsystem RPC
A subsystem RPC is not transitioned to a paused state when there
are ios outstanding (tracked by subsystem poll group).

In general AERs, are not tracked as outstanding IOs. However,
there are 3 paths in nvmf_ctrlr_async_event_request which do not
adjust the outstanding io count.
If we get into any of these 3 paths, the subsystem pause can hang
forever.

The issue was reproduced with hot plug stress testing under load.
We can get into the second path (SPDK_NVME_ASYNC_EVENT_TYPE_NOTICE)
under these circumstances:
- An AER completion is sent to the initiator due to a namespace change
(e.g. hot remove/add)
- In this case, type is set to SPDK_NVME_ASYNC_EVENT_TYPE_NOTICE
- The initiator sends a new AER admin command, hitting the second path
where we return without adjusting the outstanding ios.

Fixes: 1552
Change-Id: I45f781966cc1e9a601b2305c7985a21154d802e8
Signed-off-by: Michael Haeuptle <michael.haeuptle@hpe.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3854
Community-CI: Mellanox Build Bot
Community-CI: Broadcom CI
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Seth Howell <seth.howell@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: JinYu <jin.yu@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
2020-08-20 09:31:17 +00:00
..
ctrlr_bdev.c lib/nvmf: Support custom admin cmd handler for abort 2020-07-24 07:25:47 +00:00
ctrlr_discovery.c lib/nvmf: remove spdk_ and _spdk prefix from functions. 2020-06-01 09:21:14 +00:00
ctrlr.c lib/nvmf: Fixes stuck subsystem RPC 2020-08-20 09:31:17 +00:00
fc_ls.c nvmf: Remove new_qpair callback from transport accept function pointer 2020-06-18 07:29:41 +00:00
fc.c lib/nvmf: Add nvmf_transport_qpair_abort_request() 2020-07-14 07:54:42 +00:00
Makefile lib/nvmf: make spdk_nvmf_qpair_disconnect thread safe. 2020-08-12 07:51:15 +00:00
nvmf_fc.h nvmf: Remove new_qpair callback from transport accept function pointer 2020-06-18 07:29:41 +00:00
nvmf_internal.h lib/nvmf: add an in_destruct flag to the ctrlr struct 2020-08-17 08:28:49 +00:00
nvmf_rpc.c nvmf/rpc: stop_listen rpc now uses the async stop listen function. 2020-08-11 08:29:14 +00:00
nvmf.c lib/nvmf: add an in_destruct flag to the ctrlr struct 2020-08-17 08:28:49 +00:00
rdma.c rdma: Do not use the poller to handle the qpair exiting. 2020-08-19 07:28:36 +00:00
spdk_nvmf.map lib/nvmf:add spdk_nvmf_transport_stop_listen_async API. 2020-08-11 08:29:14 +00:00
subsystem.c lib/nvmf: remove spdk_ and _spdk prefix from functions. 2020-06-01 09:21:14 +00:00
tcp.c nvme TCP: Make the control related pdu also allocated from the SPDK DMA memory 2020-08-04 18:28:08 +00:00
transport.c nvmf: association timer triggered on shutdown 2020-08-13 07:53:08 +00:00
transport.h lib/nvmf: Add nvmf_transport_qpair_abort_request() 2020-07-14 07:54:42 +00:00