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

Commit cf187c2d authored by Trond Myklebust's avatar Trond Myklebust
Browse files

SUNRPC: Don't truncate tail data unnecessarily in xdr_shrink_pagelen



If we have unused buffer space, then we should make use of that rather
than unnecessarily truncating the message.

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 42d6d8ab
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -396,12 +396,21 @@ xdr_shrink_pagelen(struct xdr_buf *buf, size_t len)
	struct kvec *tail;
	size_t copy;
	unsigned int pglen = buf->page_len;
	unsigned int tailbuf_len;

	tail = buf->tail;
	BUG_ON (len > pglen);

	tailbuf_len = buf->buflen - buf->head->iov_len - buf->page_len;

	/* Shift the tail first */
	if (tail->iov_len != 0) {
	if (tailbuf_len != 0) {
		unsigned int free_space = tailbuf_len - tail->iov_len;

		if (len < free_space)
			free_space = len;
		tail->iov_len += free_space;

		copy = len;
		if (tail->iov_len > len) {
			char *p = (char *)tail->iov_base + len;