]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
nfs: do not extend writes to the entire folio
authorChristoph Hellwig <hch@lst.de>
Fri, 5 Jul 2024 05:42:51 +0000 (07:42 +0200)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Fri, 12 Jul 2024 15:36:08 +0000 (11:36 -0400)
nfs_update_folio has code to extend a write to the entire page under
certain conditions.  With the support for large folios this now
suddenly extents to the variable sized and potentially much larger folio.
Add code to limit the extension to the page boundaries of the start and
end of the write, which matches the historic expecation and the code
comments.

Fixes: b73fe2dd6cd5 ("nfs: add support for large folios")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
fs/nfs/write.c

index f0a124b45291c3535409123ff4d3c9b0d34d19a9..acf2d942d78fe2dbb0cdce4adc28c57aedcae86d 100644 (file)
@@ -1351,8 +1351,12 @@ int nfs_update_folio(struct file *file, struct folio *folio,
                goto out;
 
        if (nfs_can_extend_write(file, folio, pagelen)) {
-               count = max(count + offset, pagelen);
-               offset = 0;
+               unsigned int end = count + offset;
+
+               offset = round_down(offset, PAGE_SIZE);
+               if (end < pagelen)
+                       end = min(round_up(end, PAGE_SIZE), pagelen);
+               count = end - offset;
        }
 
        status = nfs_writepage_setup(ctx, folio, offset, count);