OSDN Git Service

mm/hugetlb: set head flag before setting compound_order in __prep_compound_gigantic_folio
authorSidhartha Kumar <sidhartha.kumar@oracle.com>
Mon, 12 Dec 2022 22:55:29 +0000 (14:55 -0800)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 13 Dec 2022 00:47:11 +0000 (16:47 -0800)
folio_set_compound_order() checks if the passed in folio is a large folio.
A large folio is indicated by the PG_head flag.  Call __folio_set_head()
before setting the order.

Link: https://lkml.kernel.org/r/20221212225529.22493-1-sidhartha.kumar@oracle.com
Fixes: d1c6095572d0 ("mm/hugetlb: convert hugetlb prep functions to folios")
Signed-off-by: Sidhartha Kumar <sidhartha.kumar@oracle.com>
Reported-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/hugetlb.c

index 8c6fe22..7cdbcc2 100644 (file)
@@ -1805,10 +1805,10 @@ static bool __prep_compound_gigantic_folio(struct folio *folio,
        int nr_pages = 1 << order;
        struct page *p;
 
-       /* we rely on prep_new_hugetlb_folio to set the destructor */
-       folio_set_compound_order(folio, order);
        __folio_clear_reserved(folio);
        __folio_set_head(folio);
+       /* we rely on prep_new_hugetlb_folio to set the destructor */
+       folio_set_compound_order(folio, order);
        for (i = 0; i < nr_pages; i++) {
                p = folio_page(folio, i);