Commit 5ea1c959 authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Jim Harris
Browse files

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: default avatarShuhei 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: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarAlexey Marchuk <alexeymar@mellanox.com>
Reviewed-by: default avatarSeth Howell <seth.howell@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent a5d9d778
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -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;