commit:     f2b7022ccc048d545f23b383a7716a0cf9c7304f
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Tue Feb  9 19:09:13 2021 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Tue Feb  9 19:09:13 2021 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=f2b7022c

SUNRPC: Fix NFS READs that start at non-page-aligned offsets

See https://bugs.gentoo.org/768720
Thanks to DaggyStyle for reporting and testing

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README                                        |  4 ++
 ...RPC-NFS-fix-non-page-aligned-offsets-read.patch | 53 ++++++++++++++++++++++
 2 files changed, 57 insertions(+)

diff --git a/0000_README b/0000_README
index 897c945..7375e82 100644
--- a/0000_README
+++ b/0000_README
@@ -111,6 +111,10 @@ Patch:  
2000_BT-Check-key-sizes-only-if-Secure-Simple-Pairing-enabled.patch
 From:   
https://lore.kernel.org/linux-bluetooth/[email protected]/raw
 Desc:   Bluetooth: Check key sizes only when Secure Simple Pairing is enabled. 
See bug #686758
 
+Patch:  2400_SUNRPC-NFS-fix-non-page-aligned-offsets-read.patch
+From:   
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/net/sunrpc/svcsock.c?id=bad4c6eb5eaa8300e065bd4426727db5141d687d
+Desc:   SUNRPC: Fix NFS READs that start at non-page-aligned offsets
+
 Patch:  2900_tmp513-Fix-build-issue-by-selecting-CONFIG_REG.patch
 From:   https://bugs.gentoo.org/710790
 Desc:   tmp513 requies REGMAP_I2C to build.  Select it by default in Kconfig. 
See bug #710790. Thanks to Phil Stracchino

diff --git a/2400_SUNRPC-NFS-fix-non-page-aligned-offsets-read.patch 
b/2400_SUNRPC-NFS-fix-non-page-aligned-offsets-read.patch
new file mode 100644
index 0000000..34d6ebb
--- /dev/null
+++ b/2400_SUNRPC-NFS-fix-non-page-aligned-offsets-read.patch
@@ -0,0 +1,53 @@
+From bad4c6eb5eaa8300e065bd4426727db5141d687d Mon Sep 17 00:00:00 2001
+From: Chuck Lever <[email protected]>
+Date: Sun, 31 Jan 2021 16:16:23 -0500
+Subject: SUNRPC: Fix NFS READs that start at non-page-aligned offsets
+
+Anj Duvnjak reports that the Kodi.tv NFS client is not able to read
+video files from a v5.10.11 Linux NFS server.
+
+The new sendpage-based TCP sendto logic was not attentive to non-
+zero page_base values. nfsd_splice_read() sets that field when a
+READ payload starts in the middle of a page.
+
+The Linux NFS client rarely emits an NFS READ that is not page-
+aligned. All of my testing so far has been with Linux clients, so I
+missed this one.
+
+Reported-by: A. Duvnjak <[email protected]>
+BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=211471
+Fixes: 4a85a6a3320b ("SUNRPC: Handle TCP socket sends with kernel_sendpage() 
again")
+Signed-off-by: Chuck Lever <[email protected]>
+Tested-by: A. Duvnjak <[email protected]>
+---
+ net/sunrpc/svcsock.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+(limited to 'net/sunrpc/svcsock.c')
+
+diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
+index c9766d07eb81a..5a809c64dc7b9 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);
+-- 
+cgit 1.2.3-1.el7
+

Reply via email to