Skip to content

Commit 040249d

Browse files
committed
SUNRPC: Cleanup xs_tcp_read_common()
Simplify the code to avoid a full copy of the struct xdr_skb_reader. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
1 parent 8d6f97d commit 040249d

File tree

1 file changed

+8
-17
lines changed

1 file changed

+8
-17
lines changed

net/sunrpc/xprtsock.c

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,25 +1287,12 @@ static inline void xs_tcp_read_common(struct rpc_xprt *xprt,
12871287
}
12881288

12891289
len = desc->count;
1290-
if (len > transport->tcp_reclen - transport->tcp_offset) {
1291-
struct xdr_skb_reader my_desc;
1292-
1293-
len = transport->tcp_reclen - transport->tcp_offset;
1294-
memcpy(&my_desc, desc, sizeof(my_desc));
1295-
my_desc.count = len;
1296-
r = xdr_partial_copy_from_skb(rcvbuf, transport->tcp_copied,
1297-
&my_desc, xdr_skb_read_bits);
1298-
desc->count -= r;
1299-
desc->offset += r;
1300-
} else
1301-
r = xdr_partial_copy_from_skb(rcvbuf, transport->tcp_copied,
1290+
if (len > transport->tcp_reclen - transport->tcp_offset)
1291+
desc->count = transport->tcp_reclen - transport->tcp_offset;
1292+
r = xdr_partial_copy_from_skb(rcvbuf, transport->tcp_copied,
13021293
desc, xdr_skb_read_bits);
13031294

1304-
if (r > 0) {
1305-
transport->tcp_copied += r;
1306-
transport->tcp_offset += r;
1307-
}
1308-
if (r != len) {
1295+
if (desc->count) {
13091296
/* Error when copying to the receive buffer,
13101297
* usually because we weren't able to allocate
13111298
* additional buffer pages. All we can do now
@@ -1325,6 +1312,10 @@ static inline void xs_tcp_read_common(struct rpc_xprt *xprt,
13251312
return;
13261313
}
13271314

1315+
transport->tcp_copied += r;
1316+
transport->tcp_offset += r;
1317+
desc->count = len - r;
1318+
13281319
dprintk("RPC: XID %08x read %zd bytes\n",
13291320
ntohl(transport->tcp_xid), r);
13301321
dprintk("RPC: xprt = %p, tcp_copied = %lu, tcp_offset = %u, "

0 commit comments

Comments
 (0)