lib/nvme: check that req is not null in RDMA.
When a request has been aborted, it's possible to get a completion for an rdma request but the rdma_req->req object has already been cleared to NULL. Signed-off-by: Seth Howell <seth.howell@intel.com> Change-Id: I5f7b1b96ff4be8c436aae9a7e2a7c9927d04e627 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1960 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
c62887ad0b
commit
b4e060b560
@ -2143,17 +2143,23 @@ nvme_rdma_cq_process_completions(struct ibv_cq *cq, uint32_t batch_size)
|
||||
|
||||
case RDMA_WR_TYPE_SEND:
|
||||
rdma_req = SPDK_CONTAINEROF(rdma_wr, struct spdk_nvme_rdma_req, rdma_wr);
|
||||
rqpair = nvme_rdma_qpair(rdma_req->req->qpair);
|
||||
rdma_req->completion_flags |= NVME_RDMA_SEND_COMPLETED;
|
||||
|
||||
/* If we are flushing I/O */
|
||||
if (wc[i].status) {
|
||||
rqpair = rdma_req->req ? nvme_rdma_qpair(rdma_req->req->qpair) : NULL;
|
||||
if (rqpair) {
|
||||
nvme_rdma_fail_qpair(&rqpair->qpair, 0);
|
||||
}
|
||||
SPDK_ERRLOG("CQ error on Queue Pair %p, Response Index %lu (%d): %s\n",
|
||||
rqpair, wc[i].wr_id, wc[i].status, ibv_wc_status_str(wc[i].status));
|
||||
nvme_rdma_fail_qpair(&rqpair->qpair, 0);
|
||||
completion_rc = -ENXIO;
|
||||
continue;
|
||||
}
|
||||
|
||||
rqpair = nvme_rdma_qpair(rdma_req->req->qpair);
|
||||
rdma_req->completion_flags |= NVME_RDMA_SEND_COMPLETED;
|
||||
|
||||
|
||||
if ((rdma_req->completion_flags & NVME_RDMA_RECV_COMPLETED) != 0) {
|
||||
if (spdk_unlikely(nvme_rdma_request_ready(rqpair, rdma_req))) {
|
||||
SPDK_ERRLOG("Unable to re-post rx descriptor\n");
|
||||
|
Loading…
Reference in New Issue
Block a user