]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
netfs: Fix folio state after ENOMEM whilst under writeback iteration
authorDavid Howells <dhowells@redhat.com>
Thu, 25 Jun 2026 14:06:32 +0000 (15:06 +0100)
committerChristian Brauner <brauner@kernel.org>
Wed, 1 Jul 2026 13:26:30 +0000 (15:26 +0200)
Fix the state of the current folio when ENOMEM occurs during writeback
iteration.  The folio needs to be redirtied and unlocked before the
terminal writeback_iter() is invoked.

Fixes: 06fa229ceb36 ("netfs: Abstract out a rolling folio buffer implementation")
Link: https://sashiko.dev/#/patchset/20260619140646.2633762-1-dhowells%40redhat.com
Signed-off-by: David Howells <dhowells@redhat.com>
Link: https://patch.msgid.link/20260625140640.3116900-15-dhowells@redhat.com
cc: Paulo Alcantara <pc@manguebit.org>
cc: Matthew Wilcox <willy@infradead.org>
cc: netfs@lists.linux.dev
cc: linux-fsdevel@vger.kernel.org
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
fs/netfs/write_issue.c

index 3682896c3fdf0d5debfd4840fa2d48c8f6e1e1e6..f2761c99795a6b6aa4ecacd6902c8d696f31aaed 100644 (file)
@@ -582,6 +582,10 @@ int netfs_writepages(struct address_space *mapping,
                }
 
                error = netfs_write_folio(wreq, wbc, folio);
+               if (error == -ENOMEM) {
+                       folio_redirty_for_writepage(wbc, folio);
+                       folio_unlock(folio);
+               }
        } while ((folio = writeback_iter(mapping, wbc, folio, &error)));
 
        netfs_end_issue_write(wreq);