diff --git a/fs/netfs/write_issue.c b/fs/netfs/write_issue.c index f2761c99795a..5aa47128f7e7 100644 --- a/fs/netfs/write_issue.c +++ b/fs/netfs/write_issue.c @@ -597,10 +597,11 @@ int netfs_writepages(struct address_space *mapping, couldnt_start: if (error == -ENOMEM) { - folio_redirty_for_writepage(wbc, folio); - folio_unlock(folio); - folio = writeback_iter(mapping, wbc, folio, &error); - WARN_ON_ONCE(folio != NULL); + /* Redirty all dirty folios and let writeback retry later. */ + do { + folio_redirty_for_writepage(wbc, folio); + folio_unlock(folio); + } while ((folio = writeback_iter(mapping, wbc, folio, &error))); } else { netfs_kill_dirty_pages(mapping, wbc, folio); }