]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
afs: Fix dangling folio ref counts in writeback
authorVishal Moola (Oracle) <vishal.moola@gmail.com>
Wed, 7 Jun 2023 20:41:19 +0000 (13:41 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 28 Jun 2023 09:13:58 +0000 (11:13 +0200)
commit a2b6f2ab3e144f8e23666aafeba0e4d9ea4b7975 upstream.

Commit acc8d8588cb7 converted afs_writepages_region() to write back a
folio batch. If writeback needs rescheduling, the function exits without
dropping the references to the folios in fbatch. This patch fixes that.

[DH: Moved the added line before the _leave()]

Fixes: acc8d8588cb7 ("afs: convert afs_writepages_region() to use filemap_get_folios_tag()")
Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com>
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
Link: https://lore.kernel.org/r/20230607204120.89416-1-vishal.moola@gmail.com/
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/afs/write.c

index 571f3b9a417e5f8a8fd5d6c900c0961da83c6eae..4b6f05bdbafa04e2db48a605512a7b348d41a2dd 100644 (file)
@@ -763,6 +763,7 @@ static int afs_writepages_region(struct address_space *mapping,
                                if (wbc->sync_mode == WB_SYNC_NONE) {
                                        if (skips >= 5 || need_resched()) {
                                                *_next = start;
+                                               folio_batch_release(&fbatch);
                                                _leave(" = 0 [%llx]", *_next);
                                                return 0;
                                        }