+8
−4
Loading
Each request has a callback context as cb_arg, and the callback to nvme_complete_request() for the completed request may reuse the context to the new request. On the other hand, RDMA transport dequeues rdma_req from rqpair->outstanding_reqs after calling nvme_complete_request() for the request pointed by rdma_req. Hence while nvme_complete_request() is executed, rqpair->outstanding_reqs may have two requests which has the same callback context, the completed request and the new submitted request. The upcoming patch will search all requests whose cb_arg matches to abort them. In the above case, the search may find two requests by mistake. To avoid such error, move dequeueing rdma_req from rqpair->outstanding_reqs before calling nvme_request_complete(). Signed-off-by:Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: Ia183733f4a4cd4f85de17514ef3a884693910a05 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/2863 Tested-by:
SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Reviewed-by:
Ben Walker <benjamin.walker@intel.com> Reviewed-by:
Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by:
Michael Haeuptle <michaelhaeuptle@gmail.com>