summaryrefslogtreecommitdiff
path: root/fs/ntfs3
diff options
context:
space:
mode:
authorMatthew Wilcox (Oracle) <willy@infradead.org>2024-04-22 20:32:00 +0100
committerKonstantin Komarov <almaz.alexandrovich@paragon-software.com>2024-06-26 15:48:57 +0300
commit584f60ba22f79c89e6708ab82a5b5d9b8fa21fb2 (patch)
treeed345aa1ab3d591751a286d938dc90c4bf239450 /fs/ntfs3
parent326a6fd9600c52016c3c18c1aeafca2fab254146 (diff)
ntfs3: Convert ntfs_get_frame_pages() to use a folio
The function still takes an array of pages, but use a folio internally. This function would deadlock against itself if used with large folios (as it locks each page), so we can be a little sloppy with the conversion back from folio to page for now. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Diffstat (limited to 'fs/ntfs3')
-rw-r--r--fs/ntfs3/file.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/fs/ntfs3/file.c b/fs/ntfs3/file.c
index 9ae202901f3c..35ca0f201cb8 100644
--- a/fs/ntfs3/file.c
+++ b/fs/ntfs3/file.c
@@ -821,23 +821,24 @@ static int ntfs_get_frame_pages(struct address_space *mapping, pgoff_t index,
*frame_uptodate = true;
for (npages = 0; npages < pages_per_frame; npages++, index++) {
- struct page *page;
+ struct folio *folio;
- page = find_or_create_page(mapping, index, gfp_mask);
- if (!page) {
+ folio = __filemap_get_folio(mapping, index,
+ FGP_LOCK | FGP_ACCESSED | FGP_CREAT, gfp_mask);
+ if (IS_ERR(folio)) {
while (npages--) {
- page = pages[npages];
- unlock_page(page);
- put_page(page);
+ folio = page_folio(pages[npages]);
+ folio_unlock(folio);
+ folio_put(folio);
}
return -ENOMEM;
}
- if (!PageUptodate(page))
+ if (!folio_test_uptodate(folio))
*frame_uptodate = false;
- pages[npages] = page;
+ pages[npages] = &folio->page;
}
return 0;