diff options
Diffstat (limited to 'mm/khugepaged.c')
| -rw-r--r-- | mm/khugepaged.c | 15 | 
1 files changed, 12 insertions, 3 deletions
diff --git a/mm/khugepaged.c b/mm/khugepaged.c index b7e2268dfc9a..e42568284e06 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -530,7 +530,12 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma,  			goto out;  		} -		VM_BUG_ON_PAGE(PageCompound(page), page); +		/* TODO: teach khugepaged to collapse THP mapped with pte */ +		if (PageCompound(page)) { +			result = SCAN_PAGE_COMPOUND; +			goto out; +		} +  		VM_BUG_ON_PAGE(!PageAnon(page), page);  		/* @@ -960,7 +965,9 @@ static void collapse_huge_page(struct mm_struct *mm,  		goto out_nolock;  	} -	if (unlikely(mem_cgroup_try_charge(new_page, mm, gfp, &memcg, true))) { +	/* Do not oom kill for khugepaged charges */ +	if (unlikely(mem_cgroup_try_charge(new_page, mm, gfp | __GFP_NORETRY, +					   &memcg, true))) {  		result = SCAN_CGROUP_CHARGE_FAIL;  		goto out_nolock;  	} @@ -1319,7 +1326,9 @@ static void collapse_shmem(struct mm_struct *mm,  		goto out;  	} -	if (unlikely(mem_cgroup_try_charge(new_page, mm, gfp, &memcg, true))) { +	/* Do not oom kill for khugepaged charges */ +	if (unlikely(mem_cgroup_try_charge(new_page, mm, gfp | __GFP_NORETRY, +					   &memcg, true))) {  		result = SCAN_CGROUP_CHARGE_FAIL;  		goto out;  	}  | 

