• KAMEZAWA Hiroyuki's avatar
    mm: modify swap_map and add SWAP_HAS_CACHE flag · 355cfa73
    KAMEZAWA Hiroyuki authored
    This is a part of the patches for fixing memcg's swap accountinf leak.
    But, IMHO, not a bad patch even if no memcg.
    
    There are 2 kinds of references to swap.
     - reference from swap entry
     - reference from swap cache
    
    Then,
    
     - If there is swap cache && swap's refcnt is 1, there is only swap cache.
      (*) swapcount(entry) == 1 && find_get_page(swapper_space, entry) != NULL
    
    This counting logic have worked well for a long time.  But considering
    that we cannot know there is a _real_ reference or not by swap_map[],
    current usage of counter is not very good.
    
    This patch adds a flag SWAP_HAS_CACHE and recored information that a swap
    entry has a cache or not.  This will remove -1 magic used in swapfile.c
    and be a help to avoid unnecessary find_get_page().
    Signed-off-by: default avatarKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Tested-by: default avatarDaisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
    Cc: Balbir Singh <balbir@in.ibm.com>
    Cc: Hugh Dickins <hugh.dickins@tiscali.co.uk>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Li Zefan <lizf@cn.fujitsu.com>
    Cc: Dhaval Giani <dhaval@linux.vnet.ibm.com>
    Cc: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    355cfa73
swapfile.c 53.9 KB