]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
nfs: use writeback_iter directly
authorChristoph Hellwig <hch@lst.de>
Wed, 7 May 2025 04:48:54 +0000 (06:48 +0200)
committerAnna Schumaker <anna.schumaker@oracle.com>
Wed, 28 May 2025 21:17:13 +0000 (17:17 -0400)
Stop using write_cache_pages and use writeback_iter directly.  This
removes an indirect call per written folio and makes the code easier
to follow.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
fs/nfs/write.c

index 68c5dc061abe92fda50bec09cf8ca9119c333dd7..374fc6b34c7954ef781026e5114cf5411f366ecd 100644 (file)
@@ -694,16 +694,6 @@ static int nfs_writepage_locked(struct folio *folio,
        return err;
 }
 
-static int nfs_writepages_callback(struct folio *folio,
-                                  struct writeback_control *wbc, void *data)
-{
-       int ret;
-
-       ret = nfs_do_writepage(folio, wbc, data);
-       folio_unlock(folio);
-       return ret;
-}
-
 static void nfs_io_completion_commit(void *inode)
 {
        nfs_commit_inode(inode, 0);
@@ -739,11 +729,15 @@ int nfs_writepages(struct address_space *mapping, struct writeback_control *wbc)
        }
 
        do {
+               struct folio *folio = NULL;
+
                nfs_pageio_init_write(&pgio, inode, priority, false,
                                      &nfs_async_write_completion_ops);
                pgio.pg_io_completion = ioc;
-               err = write_cache_pages(mapping, wbc, nfs_writepages_callback,
-                                       &pgio);
+               while ((folio = writeback_iter(mapping, wbc, folio, &err))) {
+                       err = nfs_do_writepage(folio, wbc, &pgio);
+                       folio_unlock(folio);
+               }
                pgio.pg_error = 0;
                nfs_pageio_complete(&pgio);
                if (err == -EAGAIN && mntflags & NFS_MOUNT_SOFTERR)