|
|
@@ -172,8 +172,10 @@ static int __replace_page(struct vm_area_struct *vma, unsigned long addr,
|
|
|
mmu_notifier_invalidate_range_start(mm, mmun_start, mmun_end);
|
|
|
err = -EAGAIN;
|
|
|
ptep = page_check_address(page, mm, addr, &ptl, 0);
|
|
|
- if (!ptep)
|
|
|
+ if (!ptep) {
|
|
|
+ mem_cgroup_cancel_charge(kpage, memcg, false);
|
|
|
goto unlock;
|
|
|
+ }
|
|
|
|
|
|
get_page(kpage);
|
|
|
page_add_new_anon_rmap(kpage, vma, addr, false);
|
|
|
@@ -200,7 +202,6 @@ static int __replace_page(struct vm_area_struct *vma, unsigned long addr,
|
|
|
|
|
|
err = 0;
|
|
|
unlock:
|
|
|
- mem_cgroup_cancel_charge(kpage, memcg, false);
|
|
|
mmu_notifier_invalidate_range_end(mm, mmun_start, mmun_end);
|
|
|
unlock_page(page);
|
|
|
return err;
|