OSDN Git Service

nfsd_splice_actor(): handle compound pages
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 10 Sep 2022 21:14:02 +0000 (22:14 +0100)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 13 Sep 2022 02:38:36 +0000 (22:38 -0400)
commitbfbfb6182ad1d7d184b16f25165faad879147f79
tree0ef3f13917b04b9b11ff60f9706b068f4c024a03
parent568035b01cfb107af8d2e4bd2fb9aea22cf5b868
nfsd_splice_actor(): handle compound pages

pipe_buffer might refer to a compound page (and contain more than a PAGE_SIZE
worth of data).  Theoretically it had been possible since way back, but
nfsd_splice_actor() hadn't run into that until copy_page_to_iter() change.
Fortunately, the only thing that changes for compound pages is that we
need to stuff each relevant subpage in and convert the offset into offset
in the first subpage.

Acked-by: Chuck Lever <chuck.lever@oracle.com>
Tested-by: Benjamin Coddington <bcodding@redhat.com>
Fixes: f0f6b614f83d "copy_page_to_iter(): don't split high-order page in case of ITER_PIPE"
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/nfsd/vfs.c