diff options
author | Matthew Wilcox (Oracle) <willy@infradead.org> | 2024-04-22 20:32:00 +0100 |
---|---|---|
committer | Konstantin Komarov <almaz.alexandrovich@paragon-software.com> | 2024-06-26 15:48:57 +0300 |
commit | 584f60ba22f79c89e6708ab82a5b5d9b8fa21fb2 (patch) | |
tree | ed345aa1ab3d591751a286d938dc90c4bf239450 /fs/ntfs3 | |
parent | 326a6fd9600c52016c3c18c1aeafca2fab254146 (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.c | 17 |
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; |