diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2021-02-05 10:11:14 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2021-02-05 10:11:14 -0800 |
commit | 17fbcdf9f163e6c404c65bb8c17cd8d7338cc3e7 (patch) | |
tree | 24a0745518262e23300f8c70fd766fb648f9cdd4 /net | |
parent | 6157ce59bf318bd4ee23769c613cf5628d7f457b (diff) | |
parent | bad4c6eb5eaa8300e065bd4426727db5141d687d (diff) | |
download | linux-17fbcdf9f163e6c404c65bb8c17cd8d7338cc3e7.tar.bz2 |
Merge tag 'nfsd-5.11-3' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux
Pull nfsd fix from Chuck Lever:
"Fix non-page-aligned NFS READs"
* tag 'nfsd-5.11-3' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux:
SUNRPC: Fix NFS READs that start at non-page-aligned offsets
Diffstat (limited to 'net')
-rw-r--r-- | net/sunrpc/svcsock.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index c9766d07eb81..5a809c64dc7b 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c @@ -1113,14 +1113,15 @@ static int svc_tcp_sendmsg(struct socket *sock, struct msghdr *msg, unsigned int offset, len, remaining; struct bio_vec *bvec; - bvec = xdr->bvec; - offset = xdr->page_base; + bvec = xdr->bvec + (xdr->page_base >> PAGE_SHIFT); + offset = offset_in_page(xdr->page_base); remaining = xdr->page_len; flags = MSG_MORE | MSG_SENDPAGE_NOTLAST; while (remaining > 0) { if (remaining <= PAGE_SIZE && tail->iov_len == 0) flags = 0; - len = min(remaining, bvec->bv_len); + + len = min(remaining, bvec->bv_len - offset); ret = kernel_sendpage(sock, bvec->bv_page, bvec->bv_offset + offset, len, flags); |