/* ->mapping in first and second tail page is replaced by other uses */
        VM_BUG_ON_PAGE(tail > 2 && page_tail->mapping != TAIL_MAPPING,
                        page_tail);
-       page_tail->mapping = head->mapping;
-       page_tail->index = head->index + tail;
+       new_folio->mapping = folio->mapping;
+       new_folio->index = folio->index + tail;
 
        /*
         * page->private should not be set in tail pages. Fix up and warn once
        ClearPageHasHWPoisoned(head);
 
        for (i = nr - new_nr; i >= new_nr; i -= new_nr) {
+               struct folio *tail;
                __split_huge_page_tail(folio, i, lruvec, list, new_order);
+               tail = page_folio(head + i);
                /* Some pages can be beyond EOF: drop them from page cache */
-               if (head[i].index >= end) {
-                       struct folio *tail = page_folio(head + i);
-
+               if (tail->index >= end) {
                        if (shmem_mapping(folio->mapping))
                                nr_dropped++;
                        else if (folio_test_clear_dirty(tail))
                                        inode_to_wb(folio->mapping->host));
                        __filemap_remove_folio(tail, NULL);
                        folio_put(tail);
-               } else if (!PageAnon(page)) {
-                       __xa_store(&folio->mapping->i_pages, head[i].index,
-                                       head + i, 0);
+               } else if (!folio_test_anon(folio)) {
+                       __xa_store(&folio->mapping->i_pages, tail->index,
+                                       tail, 0);
                } else if (swap_cache) {
                        __xa_store(&swap_cache->i_pages, offset + i,
-                                       head + i, 0);
+                                       tail, 0);
                }
        }