[PATCH v1 1/7] xprtrdma: Clean up SGE accounting in rpcrdma_prepare_msg_sges()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



rpcrdma_prepare_hdr_sges() sets num_sge to one, then
rpcrdma_prepare_msg_sges() sets num_sge again to the count of SGEs
it added, plus one for the header SGE just mapped in
rpcrdma_prepare_hdr_sges().

Instead, maintain a running count that both functions can update as
needed. Also, simplify mapped SGE counting by just setting the count
of SGEs in the tail of rpcrdma_prepare_msg_sges(), which is the
only function that sets that field to a non-zero value.

Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
---
 net/sunrpc/xprtrdma/rpc_rdma.c |    7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c
index 84584ca..bc464b1 100644
--- a/net/sunrpc/xprtrdma/rpc_rdma.c
+++ b/net/sunrpc/xprtrdma/rpc_rdma.c
@@ -607,7 +607,6 @@ rpcrdma_prepare_msg_sges(struct rpcrdma_ia *ia, struct rpcrdma_req *req,
 			sge[sge_no].length = len;
 			sge[sge_no].lkey = lkey;
 
-			req->rl_mapped_sges++;
 			ppages++;
 			remaining -= len;
 			page_base = 0;
@@ -633,11 +632,11 @@ rpcrdma_prepare_msg_sges(struct rpcrdma_ia *ia, struct rpcrdma_req *req,
 			goto out_mapping_err;
 		sge[sge_no].length = len;
 		sge[sge_no].lkey = lkey;
-		req->rl_mapped_sges++;
 	}
 
 out:
-	req->rl_send_wr.num_sge = sge_no + 1;
+	req->rl_send_wr.num_sge += sge_no;
+	req->rl_mapped_sges = sge_no - 1;
 	return true;
 
 out_mapping_overflow:
@@ -655,7 +654,6 @@ rpcrdma_prepare_send_sges(struct rpcrdma_ia *ia, struct rpcrdma_req *req,
 			  enum rpcrdma_chunktype rtype)
 {
 	req->rl_send_wr.num_sge = 0;
-	req->rl_mapped_sges = 0;
 
 	if (!rpcrdma_prepare_hdr_sge(ia, req, hdrlen))
 		goto out_map;
@@ -682,7 +680,6 @@ rpcrdma_unmap_sges(struct rpcrdma_ia *ia, struct rpcrdma_req *req)
 	for (count = req->rl_mapped_sges; count--; sge++)
 		ib_dma_unmap_page(device, sge->addr, sge->length,
 				  DMA_TO_DEVICE);
-	req->rl_mapped_sges = 0;
 }
 
 /**

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux