|
@@ -347,7 +347,7 @@ static inline void set_page_writeback(struct page *page)
|
|
|
* tests can be used in performance sensitive paths. PageCompound is
|
|
|
* generally not used in hot code paths.
|
|
|
*/
|
|
|
-__PAGEFLAG(Head, head)
|
|
|
+__PAGEFLAG(Head, head) CLEARPAGEFLAG(Head, head)
|
|
|
__PAGEFLAG(Tail, tail)
|
|
|
|
|
|
static inline int PageCompound(struct page *page)
|
|
@@ -355,6 +355,13 @@ static inline int PageCompound(struct page *page)
|
|
|
return page->flags & ((1L << PG_head) | (1L << PG_tail));
|
|
|
|
|
|
}
|
|
|
+#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
|
+static inline void ClearPageCompound(struct page *page)
|
|
|
+{
|
|
|
+ BUG_ON(!PageHead(page));
|
|
|
+ ClearPageHead(page);
|
|
|
+}
|
|
|
+#endif
|
|
|
#else
|
|
|
/*
|
|
|
* Reduce page flag use as much as possible by overlapping
|
|
@@ -392,6 +399,14 @@ static inline void __ClearPageTail(struct page *page)
|
|
|
page->flags &= ~PG_head_tail_mask;
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
|
+static inline void ClearPageCompound(struct page *page)
|
|
|
+{
|
|
|
+ BUG_ON((page->flags & PG_head_tail_mask) != (1 << PG_compound));
|
|
|
+ clear_bit(PG_compound, &page->flags);
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
#endif /* !PAGEFLAGS_EXTENDED */
|
|
|
|
|
|
#ifdef CONFIG_MMU
|