2023-06-07 21:44:34

by Vishal Moola

[permalink] [raw]
Subject: [PATCH] afs: Fix dangling folio ref counts in writeback

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.

This has only been compile tested.

Fixes: acc8d8588cb7 ("afs: convert afs_writepages_region() to use filemap_get_folios_tag()")
Signed-off-by: Vishal Moola (Oracle) <[email protected]>
---
fs/afs/write.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/fs/afs/write.c b/fs/afs/write.c
index c822d6006033..a724228e4d94 100644
--- a/fs/afs/write.c
+++ b/fs/afs/write.c
@@ -764,6 +764,7 @@ static int afs_writepages_region(struct address_space *mapping,
if (skips >= 5 || need_resched()) {
*_next = start;
_leave(" = 0 [%llx]", *_next);
+ folio_batch_release(&fbatch);
return 0;
}
skips++;
--
2.40.1



2023-06-16 22:38:13

by David Howells

[permalink] [raw]
Subject: Re: [PATCH] afs: Fix dangling folio ref counts in writeback

Vishal Moola (Oracle) <[email protected]> wrote:

> if (skips >= 5 || need_resched()) {
> *_next = start;
> _leave(" = 0 [%llx]", *_next);
> + folio_batch_release(&fbatch);

This should go before the _leave().

> return 0;
> }

Looks okay otherwise.

David