提交 bec70574 编写于 作者: G Guo Mengqi 提交者: Wang Wensheng

mm/sharepool: fix hugepage_rsvd count increase error

hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I5RO2H
CVE: NA

--------------------------------

When nr_hugepages is configured, sharepool allocates hugepages first
from hugetlb pool, then from buddy system if the pool had been used up.
Current page release function treat the buddy system hugepages as
hugetlb pages, which caused HugePages_Rsvd to increase improperly.

Add a check in page release function:
    if the page is temporary, do not call hugetlb_unreserve_pages.
Signed-off-by: NGuo Mengqi <guomengqi3@huawei.com>
上级 564272e8
......@@ -597,11 +597,17 @@ static void remove_inode_hugepages(struct inode *inode, loff_t lstart,
*/
VM_BUG_ON(HPageRestoreReserve(page));
remove_huge_page(page);
freed++;
if (!truncate_op) {
if (unlikely(hugetlb_unreserve_pages(inode,
index, index + 1, 1)))
hugetlb_fix_reserve_counts(inode);
/*
* if the page is from buddy system, do not add to freed.
* because freed is used for hugetlbfs reservation accounting.
*/
if (!HPageTemporary(page)) {
freed++;
if (!truncate_op) {
if (unlikely(hugetlb_unreserve_pages(inode,
index, index + 1, 1)))
hugetlb_fix_reserve_counts(inode);
}
}
unlock_page(page);
......@@ -1054,7 +1060,8 @@ static int hugetlbfs_error_remove_page(struct address_space *mapping,
pgoff_t index = page->index;
remove_huge_page(page);
if (unlikely(hugetlb_unreserve_pages(inode, index, index + 1, 1)))
if (!HPageTemporary(page) &&
unlikely(hugetlb_unreserve_pages(inode, index, index + 1, 1)))
hugetlb_fix_reserve_counts(inode);
return 0;
......
......@@ -4224,8 +4224,7 @@ vm_fault_t sharepool_no_page(struct mm_struct *mm,
page = alloc_huge_page(vma, haddr, 0);
if (IS_ERR(page)) {
page = alloc_huge_page_nodemask(hstate_file(vma->vm_file),
node_id, NULL, GFP_KERNEL);
page = hugetlb_alloc_hugepage(node_id, HUGETLB_ALLOC_BUDDY);
if (!page)
page = ERR_PTR(-ENOMEM);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
新手
引导
客服 返回
顶部