• Daisuke Nishimura's avatar
    memcg: move charges of anonymous swap · 02491447
    Daisuke Nishimura authored
    This patch is another core part of this move-charge-at-task-migration
    feature.  It enables moving charges of anonymous swaps.
    
    To move the charge of swap, we need to exchange swap_cgroup's record.
    
    In current implementation, swap_cgroup's record is protected by:
    
      - page lock: if the entry is on swap cache.
      - swap_lock: if the entry is not on swap cache.
    
    This works well in usual swap-in/out activity.
    
    But this behavior make the feature of moving swap charge check many
    conditions to exchange swap_cgroup's record safely.
    
    So I changed modification of swap_cgroup's recored(swap_cgroup_record())
    to use xchg, and define a new function to cmpxchg swap_cgroup's record.
    
    This patch also enables moving charge of non pte_present but not uncharged
    swap caches, which can be exist on swap-out path, by getting the target
    pages via find_get_page() as do_mincore() does.
    
    [kosaki.motohiro@jp.fujitsu.com: fix ia64 build]
    [akpm@linux-foundation.org: fix typos]
    Signed-off-by: default avatarDaisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
    Cc: Balbir Singh <balbir@linux.vnet.ibm.com>
    Acked-by: default avatarKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Li Zefan <lizf@cn.fujitsu.com>
    Cc: Paul Menage <menage@google.com>
    Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
    Signed-off-by: default avatarKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    02491447
memcontrol.c 100 KB