nvmf/rdma: Fix wrong clear of WR SGL when rdma_fill_buffers() fails
wr->num_sge has to be used in spdk_nvmf_rdma_request_fill_iovs(), and memset() can be used instead of clearing each variable. Besides, holding cached pointer to the current WR simplifies the code a little and so is done together in this patch. Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: Iebda158f85e3a0e3046686f76991217fa7297c24 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/469198 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Seth Howell <seth.howell@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Alexey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
parent
2d224c0d60
commit
d409da0c84
@ -1673,8 +1673,8 @@ spdk_nvmf_rdma_request_fill_iovs(struct spdk_nvmf_rdma_transport *rtransport,
|
||||
struct spdk_nvmf_rdma_qpair *rqpair;
|
||||
struct spdk_nvmf_rdma_poll_group *rgroup;
|
||||
struct spdk_nvmf_request *req = &rdma_req->req;
|
||||
struct ibv_send_wr *wr = &rdma_req->data.wr;
|
||||
uint32_t num_buffers;
|
||||
uint32_t i = 0;
|
||||
int rc = 0;
|
||||
|
||||
rqpair = SPDK_CONTAINEROF(req->qpair, struct spdk_nvmf_rdma_qpair, qpair);
|
||||
@ -1695,12 +1695,12 @@ spdk_nvmf_rdma_request_fill_iovs(struct spdk_nvmf_rdma_transport *rtransport,
|
||||
rgroup,
|
||||
device,
|
||||
&rdma_req->req,
|
||||
&rdma_req->data.wr,
|
||||
wr,
|
||||
length,
|
||||
rdma_req->dif_ctx.block_size - rdma_req->dif_ctx.md_size,
|
||||
rdma_req->dif_ctx.md_size);
|
||||
} else {
|
||||
rc = nvmf_rdma_fill_buffers(rtransport, rgroup, device, req, &rdma_req->data.wr, length);
|
||||
rc = nvmf_rdma_fill_buffers(rtransport, rgroup, device, req, wr, length);
|
||||
}
|
||||
if (rc != 0) {
|
||||
goto err_exit;
|
||||
@ -1714,12 +1714,8 @@ spdk_nvmf_rdma_request_fill_iovs(struct spdk_nvmf_rdma_transport *rtransport,
|
||||
|
||||
err_exit:
|
||||
spdk_nvmf_request_free_buffers(req, &rgroup->group, &rtransport->transport, num_buffers);
|
||||
while (i) {
|
||||
i--;
|
||||
rdma_req->data.wr.sg_list[i].addr = 0;
|
||||
rdma_req->data.wr.sg_list[i].length = 0;
|
||||
rdma_req->data.wr.sg_list[i].lkey = 0;
|
||||
}
|
||||
memset(wr->sg_list, 0, sizeof(wr->sg_list[0]) * wr->num_sge);
|
||||
wr->num_sge = 0;
|
||||
req->iovcnt = 0;
|
||||
return rc;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user