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>
This commit is contained in:
Matthew Wilcox (Oracle) 2024-04-22 20:32:00 +01:00 committed by Konstantin Komarov
parent 326a6fd960
commit 584f60ba22
No known key found for this signature in database
GPG Key ID: A9B0331F832407B6

View File

@ -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;