Spdk/lib
Alexey Marchuk 8818ace2f4 nvme: Don't use stack variable to track request completion
A pointer to a stack variable is passed as an argument to
nvme_completion_poll_cb function, later this variable is used
to track completion in the spdk_nvme_wait_for_completion() function.
If normal scenario a request submitted to the admin queue will be completed
within the function which submitted the request.
spdk_nvme_wait_for_completion() calls nvme_transport_qpair_process_completions
which may return an error to the caller, the caller may exit from the
function which submitted the request and the pointer to the stack variable
will no longer be valid. Thereby the request may not be completed at that time
and completed later (e.g. when the controller/qpair are destroyed)
and that will lead to call to nvme_completion_poll_cb with the pointer
to invalid stack variable.
Fix - Dynamically allocate status structure to track the completion;
Add a new field to nvme_completion_poll_status structure to track status
objects that need to be freed in a completion callback

Fixes #1125

Change-Id: Ie0cd8316e1284d42a67439b056c48ab89f23e0d0
Signed-off-by: Alexey Marchuk <alexeymar@mellanox.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/481530
Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
2020-01-27 22:48:18 +00:00
..
bdev bdev: handle unlock v. lock race 2020-01-27 17:39:52 +00:00
blob lib/blob: rename num_clusters_in_et to remaining_clusters_in_et 2020-01-27 18:06:43 +00:00
blobfs blobfs: write IO directly if it is lba aligned 2020-01-07 12:19:14 +00:00
conf string: spdk_strtol to delegate additional error checking 2019-01-29 00:10:57 +00:00
copy lib/copy: move ioat subdir to module directory. 2019-08-22 16:29:49 +00:00
env_dpdk env/dpdk: Detect DPDK's iova mode 2020-01-07 12:14:56 +00:00
env_ocf lib/bdev/ocf: update of ocf library to version 19.06 2019-10-22 17:22:41 +00:00
event lib/app: Change signal handler to use spdk_thread_send_critical_msg 2020-01-13 12:42:49 +00:00
ftl lib/ftl: Change "lbk" name to "block" 2020-01-17 08:59:08 +00:00
ioat lib/ioat: Fix the error message when enabling ioat during application shutdown. 2019-12-30 03:09:01 +00:00
iscsi lib/iscsi: Using async writev for ISCSI_OP_LOGOUT_RSP PDU 2020-01-23 02:29:58 +00:00
json json_util: fix typo in debug message. 2019-05-31 14:39:53 +00:00
jsonrpc json: increase the json rpc client value limit 2019-11-18 13:16:49 +00:00
log lib/log: passing va_list to user-provided log call 2019-10-09 14:35:51 +00:00
log_rpc RPC: rename get_log_flags to log_get_flags 2019-09-24 16:42:41 +00:00
lvol lib/blob: store clear_method in per blob metadata 2020-01-20 09:57:16 +00:00
nbd rpc: Rename get_nbd_disks to nbd_get_disks 2019-09-19 20:56:35 +00:00
net net: add the check for the add and delete IP operation 2019-12-09 17:39:50 +00:00
notify RPC: rename get_notifications to notify_get_notifications 2019-09-24 16:42:41 +00:00
nvme nvme: Don't use stack variable to track request completion 2020-01-27 22:48:18 +00:00
nvmf nvmf/tcp: Correctly kick the recv state machine when a request is freed 2020-01-27 17:42:24 +00:00
reduce lib/reduce: move _alloc_zero_buf earlier in init stage. 2019-12-19 11:04:57 +00:00
rocksdb RocksDB: Remove static and assert for SpdkInitializeThread 2019-07-05 04:19:11 +00:00
rpc RPC: properly set the address in error cases 2019-12-04 15:11:55 +00:00
rte_vhost vhost: make SPDK internal vhost library can work compatible with live recovery 2020-01-22 13:54:19 +00:00
scsi lib/scsi: Move scsi_task_free_data() in a file to remove function declaration 2019-11-21 08:01:29 +00:00
sock sock/posix: Add flush 2020-01-22 13:53:09 +00:00
thread thread: free message event after executing the callback successfully 2020-01-22 01:25:03 +00:00
trace trace: fix calculation of histories_size 2019-11-06 15:19:48 +00:00
ut_mock test: Add mocks for sendmsg and recvmsg 2019-11-01 17:56:16 +00:00
util util: Add spdk_iovcpy, an iovec to iovec copy function. 2019-11-20 09:35:32 +00:00
vhost vhost_blk: need init task when resubmit the blk request 2020-01-24 08:07:13 +00:00
virtio virtio_user: use correct #ifndef for the internal vhost.h header 2020-01-10 08:45:45 +00:00
vmd lib/vmd: track hotplug memory usage 2019-12-12 14:52:59 +00:00
Makefile make: add dependencies for the rte_vhost build. 2019-09-09 22:15:24 +00:00