From: Matthew Wilcox (Oracle) Date: Mon, 22 Apr 2024 19:32:00 +0000 (+0100) Subject: ntfs3: Convert ntfs_get_frame_pages() to use a folio X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=584f60ba22f79c89e6708ab82a5b5d9b8fa21fb2;p=users%2Fjedix%2Flinux-maple.git 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) Signed-off-by: Konstantin Komarov --- diff --git a/fs/ntfs3/file.c b/fs/ntfs3/file.c index 9ae202901f3c0..35ca0f201cb8e 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;