mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-28 09:31:14 +00:00
memcg: fix deadlock between lock_page_cgroup and mapping tree_lock
mapping->tree_lock can be acquired from interrupt context. Then, following dead lock can occur. Assume "A" as a page. CPU0: lock_page_cgroup(A) interrupted -> take mapping->tree_lock. CPU1: take mapping->tree_lock -> lock_page_cgroup(A) This patch tries to fix above deadlock by moving memcg's hook to out of mapping->tree_lock. charge/uncharge of pagecache/swapcache is protected by page lock, not tree_lock. After this patch, lock_page_cgroup() is not called under mapping->tree_lock. Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Signed-off-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp> Cc: Balbir Singh <balbir@in.ibm.com> Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
bd6daba909
commit
e767e0561d
6 changed files with 15 additions and 7 deletions
|
@ -109,8 +109,6 @@ int add_to_swap_cache(struct page *page, swp_entry_t entry, gfp_t gfp_mask)
|
|||
*/
|
||||
void __delete_from_swap_cache(struct page *page)
|
||||
{
|
||||
swp_entry_t ent = {.val = page_private(page)};
|
||||
|
||||
VM_BUG_ON(!PageLocked(page));
|
||||
VM_BUG_ON(!PageSwapCache(page));
|
||||
VM_BUG_ON(PageWriteback(page));
|
||||
|
@ -121,7 +119,6 @@ void __delete_from_swap_cache(struct page *page)
|
|||
total_swapcache_pages--;
|
||||
__dec_zone_page_state(page, NR_FILE_PAGES);
|
||||
INC_CACHE_INFO(del_total);
|
||||
mem_cgroup_uncharge_swapcache(page, ent);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -191,6 +188,7 @@ void delete_from_swap_cache(struct page *page)
|
|||
__delete_from_swap_cache(page);
|
||||
spin_unlock_irq(&swapper_space.tree_lock);
|
||||
|
||||
mem_cgroup_uncharge_swapcache(page, entry);
|
||||
swap_free(entry);
|
||||
page_cache_release(page);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue