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);
|
& ~NVMF_DATA_BUFFER_MASK);
|
||||||
iov->iov_len = spdk_min(remaining_length, rtransport->transport.opts.io_unit_size);
|
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))) {
|
&remaining_data_block, &offset, dif_ctx))) {
|
||||||
if (nvmf_rdma_replace_buffer(rgroup, &req->buffers[req->iovcnt]) == -ENOMEM) {
|
if (nvmf_rdma_replace_buffer(rgroup, &req->buffers[req->iovcnt]) == -ENOMEM) {
|
||||||
return -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;
|
remaining_length -= iov->iov_len;
|
||||||
@ -1690,11 +1692,13 @@ nvmf_rdma_fill_buffers(struct spdk_nvmf_rdma_transport *rtransport,
|
|||||||
~NVMF_DATA_BUFFER_MASK);
|
~NVMF_DATA_BUFFER_MASK);
|
||||||
req->iov[req->iovcnt].iov_len = spdk_min(length,
|
req->iov[req->iovcnt].iov_len = spdk_min(length,
|
||||||
rtransport->transport.opts.io_unit_size);
|
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) {
|
if (nvmf_rdma_replace_buffer(rgroup, &req->buffers[req->iovcnt]) == -ENOMEM) {
|
||||||
return -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;
|
length -= req->iov[req->iovcnt].iov_len;
|
||||||
|
Loading…
Reference in New Issue
Block a user