Hi,
On 19.7.2023 9.31, Muchun Song wrote:
The ckeck of PageReserved() is easy to be broken in the future, PageCompound()
is more stable to check if the page should be split.
Signed-off-by: Muchun Song <songmuchun@xxxxxxxxxxxxx>
---
mm/hugetlb_vmemmap.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c
index 4b9734777f69..8068fe890f52 100644
--- a/mm/hugetlb_vmemmap.c
+++ b/mm/hugetlb_vmemmap.c
@@ -73,8 +73,10 @@ static int split_vmemmap_huge_pmd(pmd_t *pmd, unsigned long start)
* be treated as indepdenent small pages (as they can be freed
* individually).
*/
- if (!PageReserved(head))
+ if (PageCompound(head)) {
+ VM_BUG_ON(compound_order(head) != get_order(PMD_SIZE));
split_page(head, get_order(PMD_SIZE));
I think vmemmap pages are not compound pages (even order > 0).
They would bug on here trying to split_page() :
void split_page(struct page *page, unsigned int order)
{
int i;
VM_BUG_ON_PAGE(PageCompound(page), page);
+ }
/* Make pte visible before pmd. See comment in pmd_install(). */
smp_wmb();
--Mika