]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
NFS/localio: Deal with page bases that are > PAGE_SIZE
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Fri, 2 Jan 2026 23:55:08 +0000 (18:55 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Wed, 7 Jan 2026 17:28:27 +0000 (12:28 -0500)
When resending requests, etc, the page base can quickly grow larger than
the page size.

Fixes: 091bdcfcece0 ("nfs/localio: refactor iocb and iov_iter_bvec initialization")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Reviewed-by: Mike Snitzer <snitzer@kernel.org>
fs/nfs/localio.c

index c884245e8fb87643847a82972fdfdcb689ede989..41fbcb3f9167e9aab25abc6fa4b31d61466bbf6d 100644 (file)
@@ -461,6 +461,8 @@ nfs_local_iters_init(struct nfs_local_kiocb *iocb, int rw)
        v = 0;
        total = hdr->args.count;
        base = hdr->args.pgbase;
+       pagevec += base >> PAGE_SHIFT;
+       base &= ~PAGE_MASK;
        while (total && v < hdr->page_array.npages) {
                len = min_t(size_t, total, PAGE_SIZE - base);
                bvec_set_page(&iocb->bvec[v], *pagevec, len, base);