mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-10 07:50:04 +00:00
fix for nfsd regression caused by iov_iter stuff this window
-----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQQqUNBr3gm4hGXdBJlZ7Krx/gZQ6wUCYx/tpQAKCRBZ7Krx/gZQ 6wuPAQCrJ18XdncE/VnpRfcpQ+UQJXryURXwijaVBswv3LpM/gEAgQcmFff7pR0P ZXzS56F/D0faE2evltbAMQCWUoeapQA= =mTrE -----END PGP SIGNATURE----- Merge tag 'pull-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs Pull iov_iter fix from Al Viro: "Fix for a nfsd regression caused by the iov_iter stuff this window" * tag 'pull-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: nfsd_splice_actor(): handle compound pages
This commit is contained in:
commit
d1221cea11
@ -845,10 +845,14 @@ nfsd_splice_actor(struct pipe_inode_info *pipe, struct pipe_buffer *buf,
|
||||
struct splice_desc *sd)
|
||||
{
|
||||
struct svc_rqst *rqstp = sd->u.data;
|
||||
struct page *page = buf->page; // may be a compound one
|
||||
unsigned offset = buf->offset;
|
||||
|
||||
svc_rqst_replace_page(rqstp, buf->page);
|
||||
if (rqstp->rq_res.page_len == 0)
|
||||
rqstp->rq_res.page_base = buf->offset;
|
||||
page += offset / PAGE_SIZE;
|
||||
for (int i = sd->len; i > 0; i -= PAGE_SIZE)
|
||||
svc_rqst_replace_page(rqstp, page++);
|
||||
if (rqstp->rq_res.page_len == 0) // first call
|
||||
rqstp->rq_res.page_base = offset % PAGE_SIZE;
|
||||
rqstp->rq_res.page_len += sd->len;
|
||||
return sd->len;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user