mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 14:42:24 +00:00
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: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
42d6d8ab51
commit
cf187c2d7e
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user