mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-25 20:14:25 +08:00
xprtrdma: Simplify rpcrdma_convert_kvec() and frwr_map()
Clean up. Remove a conditional branch from the SGL set-up loop in frwr_map(): Instead of using either sg_set_page() or sg_set_buf(), initialize the mr_page field properly when rpcrdma_convert_kvec() converts the kvec to an SGL entry. frwr_map() can then invoke sg_set_page() unconditionally. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Reviewed-by: Tom Talpey <tom@talpey.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
9929f4adce
commit
54e6aec57c
@ -306,14 +306,10 @@ struct rpcrdma_mr_seg *frwr_map(struct rpcrdma_xprt *r_xprt,
|
||||
if (nsegs > ep->re_max_fr_depth)
|
||||
nsegs = ep->re_max_fr_depth;
|
||||
for (i = 0; i < nsegs;) {
|
||||
if (seg->mr_page)
|
||||
sg_set_page(&mr->mr_sg[i],
|
||||
seg->mr_page,
|
||||
seg->mr_len,
|
||||
offset_in_page(seg->mr_offset));
|
||||
else
|
||||
sg_set_buf(&mr->mr_sg[i], seg->mr_offset,
|
||||
seg->mr_len);
|
||||
sg_set_page(&mr->mr_sg[i],
|
||||
seg->mr_page,
|
||||
seg->mr_len,
|
||||
offset_in_page(seg->mr_offset));
|
||||
|
||||
++seg;
|
||||
++i;
|
||||
|
@ -213,7 +213,7 @@ static struct rpcrdma_mr_seg *
|
||||
rpcrdma_convert_kvec(struct kvec *vec, struct rpcrdma_mr_seg *seg,
|
||||
unsigned int *n)
|
||||
{
|
||||
seg->mr_page = NULL;
|
||||
seg->mr_page = virt_to_page(vec->iov_base);
|
||||
seg->mr_offset = vec->iov_base;
|
||||
seg->mr_len = vec->iov_len;
|
||||
++seg;
|
||||
|
@ -283,10 +283,11 @@ enum {
|
||||
RPCRDMA_MAX_IOV_SEGS,
|
||||
};
|
||||
|
||||
struct rpcrdma_mr_seg { /* chunk descriptors */
|
||||
u32 mr_len; /* length of chunk or segment */
|
||||
struct page *mr_page; /* owning page, if any */
|
||||
char *mr_offset; /* kva if no page, else offset */
|
||||
/* Arguments for DMA mapping and registration */
|
||||
struct rpcrdma_mr_seg {
|
||||
u32 mr_len; /* length of segment */
|
||||
struct page *mr_page; /* underlying struct page */
|
||||
char *mr_offset; /* IN: page offset, OUT: iova */
|
||||
};
|
||||
|
||||
/* The Send SGE array is provisioned to send a maximum size
|
||||
|
Loading…
Reference in New Issue
Block a user