]> git.ipfire.org Git - people/ms/linux.git/blobdiff - fs/ext2/dir.c
Merge branch 'for-6.0/dax' into libnvdimm-fixes
[people/ms/linux.git] / fs / ext2 / dir.c
index 43de293cef56be78f40a6cf12830b82a9b10697c..8f597753ac129dfb30f0dfe0c30aa43e13cf8af3 100644 (file)
@@ -200,19 +200,19 @@ static struct page * ext2_get_page(struct inode *dir, unsigned long n,
                                   int quiet, void **page_addr)
 {
        struct address_space *mapping = dir->i_mapping;
-       struct page *page = read_mapping_page(mapping, n, NULL);
-       if (!IS_ERR(page)) {
-               *page_addr = kmap_local_page(page);
-               if (unlikely(!PageChecked(page))) {
-                       if (PageError(page) || !ext2_check_page(page, quiet,
-                                                               *page_addr))
-                               goto fail;
-               }
+       struct folio *folio = read_mapping_folio(mapping, n, NULL);
+
+       if (IS_ERR(folio))
+               return &folio->page;
+       *page_addr = kmap_local_folio(folio, n & (folio_nr_pages(folio) - 1));
+       if (unlikely(!folio_test_checked(folio))) {
+               if (!ext2_check_page(&folio->page, quiet, *page_addr))
+                       goto fail;
        }
-       return page;
+       return &folio->page;
 
 fail:
-       ext2_put_page(page, *page_addr);
+       ext2_put_page(&folio->page, *page_addr);
        return ERR_PTR(-EIO);
 }