diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2022-06-05 16:44:53 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2022-06-05 16:44:53 -0400 |
commit | 5d370ea0a95804da1d533cc806040f78b0a6f297 (patch) | |
tree | ea333d8344734f33d79cbcf8d4e7049c655b93a4 /fs/f2fs/compress.c | |
parent | 6fc5ba99ee0db14f86d99db929210e21b68b9ab2 (diff) |
filemap: for_each_folio_batched()folio_iter_batched
This adds a cleaner interface around iterating over folios with batched
lookup, and a new iterator type (folio_iter_batched), and converts most
users of filemap_get_folios() to the new interface.
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Diffstat (limited to 'fs/f2fs/compress.c')
-rw-r--r-- | fs/f2fs/compress.c | 44 |
1 files changed, 15 insertions, 29 deletions
diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c index 009e6c519e98..45f605d7978f 100644 --- a/fs/f2fs/compress.c +++ b/fs/f2fs/compress.c @@ -1832,42 +1832,28 @@ bool f2fs_load_compressed_page(struct f2fs_sb_info *sbi, struct page *page, void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi, nid_t ino) { struct address_space *mapping = sbi->compress_inode->i_mapping; - struct folio_batch fbatch; - pgoff_t index = 0; - pgoff_t end = MAX_BLKADDR(sbi); + struct folio_iter_batched iter; + struct folio *folio; if (!mapping->nrpages) return; - folio_batch_init(&fbatch); - - do { - unsigned int nr, i; - - nr = filemap_get_folios(mapping, &index, end - 1, &fbatch); - if (!nr) - break; - - for (i = 0; i < nr; i++) { - struct folio *folio = fbatch.folios[i]; - - folio_lock(folio); - if (folio->mapping != mapping) { - folio_unlock(folio); - continue; - } - - if (ino != get_page_private_data(&folio->page)) { - folio_unlock(folio); - continue; - } + for_each_folio_batched(mapping, iter, 0, MAX_BLKADDR(sbi), folio) { + folio_lock(folio); + if (folio->mapping != mapping) { + folio_unlock(folio); + continue; + } - generic_error_remove_page(mapping, &folio->page); + if (ino != get_page_private_data(&folio->page)) { folio_unlock(folio); + continue; } - folio_batch_release(&fbatch); - cond_resched(); - } while (index < end); + + generic_error_remove_page(mapping, &folio->page); + folio_unlock(folio); + } + folio_iter_batched_exit(&iter); } int f2fs_init_compress_inode(struct f2fs_sb_info *sbi) |