Spdk/lib/nvme
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
..
Makefile lib/nvme: add NVMe character device 2019-10-24 23:43:59 +00:00
nvme_ctrlr_cmd.c nvme: add spdk_nvme_ctrlr_cmd_get_log_page_ext() 2020-01-10 08:46:33 +00:00
nvme_ctrlr_ocssd_cmd.c ocssd: hold lock when calling nvme_ctrlr_submit_admin_request 2019-02-15 21:27:58 +00:00
nvme_ctrlr.c nvme: Don't use stack variable to track request completion 2020-01-27 22:48:18 +00:00
nvme_cuse.c lib/nvme: fix cuse return status code 2020-01-16 09:20:20 +00:00
nvme_cuse.h lib/nvme: add RPC for interacting with CUSE devices 2019-10-24 23:43:59 +00:00
nvme_fabric.c nvme: Don't use stack variable to track request completion 2020-01-27 22:48:18 +00:00
nvme_internal.h nvme: Don't use stack variable to track request completion 2020-01-27 22:48:18 +00:00
nvme_io_msg.c lib/nvme: stop all NVMe io producers on detach 2019-11-28 12:36:58 +00:00
nvme_io_msg.h lib/nvme: stop all NVMe io producers on detach 2019-11-28 12:36:58 +00:00
nvme_ns_cmd.c nvme: Add spdk_nvme_ns_cmd_comparev_with_md function 2020-01-07 12:31:32 +00:00
nvme_ns_ocssd_cmd.c vtophys: add length parameter to the vtophys function 2019-01-09 08:24:59 +00:00
nvme_ns.c nvme: Don't use stack variable to track request completion 2020-01-27 22:48:18 +00:00
nvme_opal_internal.h Opal: Add async function for revert TPer 2019-10-24 17:09:57 +00:00
nvme_opal.c Opal: Add clean response buffer process 2019-12-24 08:13:57 +00:00
nvme_pcie.c nvme: Don't use stack variable to track request completion 2020-01-27 22:48:18 +00:00
nvme_qpair.c nvme: call the callback for the queued requests when there is submission failure 2019-12-20 10:04:57 +00:00
nvme_quirks.c nvme: add quirk for a minimum io queue size 2019-12-13 11:02:04 +00:00
nvme_rdma.c lib/nvme: fix cm event handling during rdma qpair shutdown. 2020-01-23 15:14:55 +00:00
nvme_tcp.c nvme/tcp: Use writev_async for sending data on sockets 2020-01-22 13:53:09 +00:00
nvme_transport.c lib/nvme: make transport.c use fn tables. 2020-01-16 09:10:38 +00:00
nvme_uevent.c nvme: add vfio driver parse event 2019-05-29 02:36:41 +00:00
nvme_uevent.h nvme: Add support of hotplug for vfio-attached devices. 2017-12-06 17:04:49 -05:00
nvme.c nvme: Don't use stack variable to track request completion 2020-01-27 22:48:18 +00:00