You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
memcg: move charge swapin under lock
While page-cache's charge/uncharge is done under page_lock(), swap-cache isn't. (anonymous page is charged when it's newly allocated.) This patch moves do_swap_page()'s charge() call under lock. I don't see any bad problem *now* but this fix will be good for future for avoiding unnecessary racy state. Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Reviewed-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp> Acked-by: Balbir Singh <balbir@linux.vnet.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
47c59803be
commit
073e587ec2
+7
-6
@@ -2326,16 +2326,17 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
|
|||||||
count_vm_event(PGMAJFAULT);
|
count_vm_event(PGMAJFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mem_cgroup_charge(page, mm, GFP_KERNEL)) {
|
|
||||||
delayacct_clear_flag(DELAYACCT_PF_SWAPIN);
|
|
||||||
ret = VM_FAULT_OOM;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
mark_page_accessed(page);
|
mark_page_accessed(page);
|
||||||
|
|
||||||
lock_page(page);
|
lock_page(page);
|
||||||
delayacct_clear_flag(DELAYACCT_PF_SWAPIN);
|
delayacct_clear_flag(DELAYACCT_PF_SWAPIN);
|
||||||
|
|
||||||
|
if (mem_cgroup_charge(page, mm, GFP_KERNEL)) {
|
||||||
|
ret = VM_FAULT_OOM;
|
||||||
|
unlock_page(page);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Back out if somebody else already faulted in this pte.
|
* Back out if somebody else already faulted in this pte.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user