Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 040249df authored by Trond Myklebust's avatar Trond Myklebust
Browse files

SUNRPC: Cleanup xs_tcp_read_common()



Simplify the code to avoid a full copy of the struct xdr_skb_reader.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
parent 8d6f97d6
Loading
Loading
Loading
Loading
+8 −17
Original line number Diff line number Diff line
@@ -1287,25 +1287,12 @@ static inline void xs_tcp_read_common(struct rpc_xprt *xprt,
	}

	len = desc->count;
	if (len > transport->tcp_reclen - transport->tcp_offset) {
		struct xdr_skb_reader my_desc;

		len = transport->tcp_reclen - transport->tcp_offset;
		memcpy(&my_desc, desc, sizeof(my_desc));
		my_desc.count = len;
		r = xdr_partial_copy_from_skb(rcvbuf, transport->tcp_copied,
					  &my_desc, xdr_skb_read_bits);
		desc->count -= r;
		desc->offset += r;
	} else
	if (len > transport->tcp_reclen - transport->tcp_offset)
		desc->count = transport->tcp_reclen - transport->tcp_offset;
	r = xdr_partial_copy_from_skb(rcvbuf, transport->tcp_copied,
					  desc, xdr_skb_read_bits);

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

	transport->tcp_copied += r;
	transport->tcp_offset += r;
	desc->count = len - r;

	dprintk("RPC:       XID %08x read %zd bytes\n",
			ntohl(transport->tcp_xid), r);
	dprintk("RPC:       xprt = %p, tcp_copied = %lu, tcp_offset = %u, "