Spdk/test
Alexey Marchuk 813869d823 nvmf: Fix possible race condition when adding IO qpair
There is a chance that admin qpair is being destroyed at
the moment when IO qpair is added to a controller due to e.g.
expired keep alive timer. Part of the qpair destruction process
is change of qpair's state to DEACTIVATING and removing it
from poll group. We can check admin qpair's state and poll
group pointer before sending a message to poll group's thread
and fail connect command.

Logs and backtrace from one CI build that hit this problem:
00:10:53.192  [2021-01-22 15:29:46.671869] ctrlr.c: 185:nvmf_ctrlr_keep_alive_poll: *NOTICE*: Disconnecting host from subsystem nqn.2016-06.io.spdk:cnode1 due to keep alive timeout.
00:10:53.374  [2021-01-22 15:29:46.854223] ctrlr.c: 185:nvmf_ctrlr_keep_alive_poll: *NOTICE*: Disconnecting host from subsystem nqn.2016-06.io.spdk:cnode2 due to keep alive timeout.
00:10:53.374  ctrlr.c:587:41: runtime error: member access within null pointer of type 'struct spdk_nvmf_poll_group'
00:10:53.486      #0 0x7f9307d3d3d8 in _nvmf_ctrlr_add_io_qpair /home/vagrant/spdk_repo/spdk/lib/nvmf/ctrlr.c:587
00:10:53.486      #1 0x7f93077ea3cd in msg_queue_run_batch /home/vagrant/spdk_repo/spdk/lib/thread/thread.c:553
00:10:53.486      #2 0x7f93077eb66f in thread_poll /home/vagrant/spdk_repo/spdk/lib/thread/thread.c:631
00:10:53.486      #3 0x7f93077ede54 in spdk_thread_poll /home/vagrant/spdk_repo/spdk/lib/thread/thread.c:740
00:10:53.486      #4 0x7f93078366c3 in _reactor_run /home/vagrant/spdk_repo/spdk/lib/event/reactor.c:677
00:10:53.486      #5 0x7f9307836ec8 in reactor_run /home/vagrant/spdk_repo/spdk/lib/event/reactor.c:721
00:10:53.486      #6 0x7f9307837dfb in spdk_reactors_start /home/vagrant/spdk_repo/spdk/lib/event/reactor.c:838
00:10:53.486      #7 0x7f930782f1c4 in spdk_app_start /home/vagrant/spdk_repo/spdk/lib/event/app.c:580
00:10:53.486      #8 0x4024fa in main /home/vagrant/spdk_repo/spdk/app/nvmf_tgt/nvmf_main.c:75
00:10:53.486      #9 0x7f930716d1a2 in __libc_start_main (/lib64/libc.so.6+0x271a2)
00:10:53.486      #10 0x40228d in _start (/home/vagrant/spdk_repo/spdk/build/bin/nvmf_tgt+0x40228d)

Change-Id: I0968eabd1bcd532b8d69434ad5503204c0a2d92b
Signed-off-by: Alexey Marchuk <alexeymar@mellanox.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6071
Community-CI: Broadcom CI
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: <dongx.yi@intel.com>
2021-01-26 08:32:39 +00:00
..
accel_engine accel_engine test: Add the test case for accel_engine. 2021-01-21 15:49:40 +00:00
app build: add ufc to SYS_LIBS in spdk.common.mk 2020-12-28 13:32:06 +00:00
bdev test/bdev: Use PRIx64 for portability 2021-01-21 09:51:20 +00:00
blobfs build: use DEPDIRS variables to build SPDK_LIB_LIST 2020-12-18 09:40:01 +00:00
blobstore scheduler: Change main core frequency dynamically 2021-01-22 18:31:25 +00:00
common test/scheduler: Add test for verifying idle state 2021-01-22 18:31:25 +00:00
compress script/gen_nvme: do not generate legacy configuration 2020-10-22 17:08:41 +00:00
config_converter scripts/config_converter: skip sections not present in legacy config 2021-01-15 08:32:10 +00:00
cpp_headers queue_extras: use SPDK_CONTAINEROF 2019-10-07 15:06:01 +00:00
dd test/dd: Lower the number of block size tests 2020-08-20 09:27:21 +00:00
dpdk_memory_utility build: Output executables from the app directory to build/bin 2020-06-15 15:27:16 +00:00
env env/dpdk: Use the DPDK device count for IOMMU mapping 2021-01-22 18:32:53 +00:00
event test/scheduler: application to test behaviour of schedulers 2021-01-22 18:31:25 +00:00
external_code libvfio-user: set COMMON_CFLAGS for external_code tests 2021-01-21 12:51:13 +00:00
ftl scripts: replace PCI_WHITELIST with PCI_ALLOWED 2020-12-03 09:41:07 +00:00
fuzz test/iscsi: remove VPP tests 2020-08-17 08:19:46 +00:00
ioat build: Example applications build to build/example 2020-06-15 15:27:16 +00:00
iscsi_tgt script/gen_nvme: do not generate legacy configuration 2020-10-22 17:08:41 +00:00
json_config lib/bdev: delay bdev_register notification til after examine 2021-01-15 08:28:57 +00:00
lvol test/lvol: rename lvol test script 2020-10-20 08:54:53 +00:00
make lib/thread: Defer exiting thread if thread is unregistering io_device 2021-01-13 10:07:51 +00:00
nvme test/nvme_perf: add option for alternative fio job layout 2021-01-18 13:02:49 +00:00
nvmf test/nvmf: add Intel E810 RDMA nic's detection 2021-01-22 08:33:05 +00:00
ocf test/ocf: remove unused nvme_cfg() function 2020-11-05 09:37:55 +00:00
openstack script/gen_nvme: do not generate legacy configuration 2020-10-22 17:08:41 +00:00
pmem build: Output executables from the app directory to build/bin 2020-06-15 15:27:16 +00:00
rpc build: Output executables from the app directory to build/bin 2020-06-15 15:27:16 +00:00
rpc_client build: use DEPDIRS variables to build SPDK_LIB_LIST 2020-12-18 09:40:01 +00:00
scheduler test/scheduler: Add basic tests for verifying interrupt mode 2021-01-25 20:37:50 +00:00
spdkcli lib/event: do not spawn a thread for each reactor 2021-01-25 04:55:54 +00:00
unit nvmf: Fix possible race condition when adding IO qpair 2021-01-26 08:32:39 +00:00
vhost test/vhost_perf: set test block device scheduler to "none" 2021-01-21 14:40:28 +00:00
vmd test: replace VMD_WHITELIST with VMD_ALLOWED 2020-12-03 09:41:07 +00:00
Makefile build: add option to disable building unit tests 2020-03-10 09:12:21 +00:00
spdk_cunit.h test: remove leftover spdk_cunit declaration 2018-07-06 22:47:56 +00:00