nvmf/rdma: Update only iov_base when buffer replacement succeeds
When buffer replacement succeeds, only iov_base has to be updated. This change is small but will be helpful to disaggregate buffer allocation and filling WR SGL. Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: Ifc72fd783b515dfaecac04939c183097f939e29b Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/469202 Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Alexey Marchuk <alexeymar@mellanox.com> Reviewed-by: Seth Howell <seth.howell@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
a5d9d77821
commit
5ea1c95947
@ -1635,12 +1635,14 @@ nvmf_rdma_fill_buffers_with_md_interleave(struct spdk_nvmf_rdma_transport *rtran
|
||||
& ~NVMF_DATA_BUFFER_MASK);
|
||||
iov->iov_len = spdk_min(remaining_length, rtransport->transport.opts.io_unit_size);
|
||||
|
||||
if (spdk_unlikely(!nvmf_rdma_fill_wr_sge_with_md_interleave(device, req, wr,
|
||||
while (spdk_unlikely(!nvmf_rdma_fill_wr_sge_with_md_interleave(device, req, wr,
|
||||
&remaining_data_block, &offset, dif_ctx))) {
|
||||
if (nvmf_rdma_replace_buffer(rgroup, &req->buffers[req->iovcnt]) == -ENOMEM) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
continue;
|
||||
req->iov[req->iovcnt].iov_base = (void *)((uintptr_t)(req->buffers[req->iovcnt] +
|
||||
NVMF_DATA_BUFFER_MASK) &
|
||||
~NVMF_DATA_BUFFER_MASK);
|
||||
}
|
||||
|
||||
remaining_length -= iov->iov_len;
|
||||
@ -1690,11 +1692,13 @@ nvmf_rdma_fill_buffers(struct spdk_nvmf_rdma_transport *rtransport,
|
||||
~NVMF_DATA_BUFFER_MASK);
|
||||
req->iov[req->iovcnt].iov_len = spdk_min(length,
|
||||
rtransport->transport.opts.io_unit_size);
|
||||
if (spdk_unlikely(!nvmf_rdma_fill_wr_sge(device, req, wr))) {
|
||||
while (spdk_unlikely(!nvmf_rdma_fill_wr_sge(device, req, wr))) {
|
||||
if (nvmf_rdma_replace_buffer(rgroup, &req->buffers[req->iovcnt]) == -ENOMEM) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
continue;
|
||||
req->iov[req->iovcnt].iov_base = (void *)((uintptr_t)(req->buffers[req->iovcnt] +
|
||||
NVMF_DATA_BUFFER_MASK) &
|
||||
~NVMF_DATA_BUFFER_MASK);
|
||||
}
|
||||
|
||||
length -= req->iov[req->iovcnt].iov_len;
|
||||
|
Loading…
Reference in New Issue
Block a user