summaryrefslogtreecommitdiffstats
path: root/mm/swap_state.c
diff options
context:
space:
mode:
authorKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>2012-01-12 17:18:57 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2012-01-12 20:13:07 -0800
commit36b62ad539498d00c2d280a151abad5f7630fa73 (patch)
tree553409901df6210e4a698c1991f9d455199e098b /mm/swap_state.c
parentdc67d50465f249bb357bf85b3ed1f642eb00130a (diff)
downloadlinux-stable-36b62ad539498d00c2d280a151abad5f7630fa73.tar.gz
linux-stable-36b62ad539498d00c2d280a151abad5f7630fa73.tar.bz2
linux-stable-36b62ad539498d00c2d280a151abad5f7630fa73.zip
memcg: simplify corner case handling of LRU.
This patch simplifies LRU handling of racy case (memcg+SwapCache). At charging, SwapCache tend to be on LRU already. So, before overwriting pc->mem_cgroup, the page must be removed from LRU and added to LRU later. This patch does spin_lock(zone->lru_lock); if (PageLRU(page)) remove from LRU overwrite pc->mem_cgroup if (PageLRU(page)) add to new LRU. spin_unlock(zone->lru_lock); And guarantee all pages are not on LRU at modifying pc->mem_cgroup. This patch also unfies lru handling of replace_page_cache() and swapin. Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Miklos Szeredi <mszeredi@suse.cz> Acked-by: Michal Hocko <mhocko@suse.cz> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Ying Han <yinghan@google.com> Cc: Hugh Dickins <hughd@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/swap_state.c')
0 files changed, 0 insertions, 0 deletions