lkml.org 
[lkml]   [2011]   [Dec]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 1/4] memcg: simplify page cache charging.
    From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>

    This patch is a clean up. No functional/logical changes.

    Because of commit ef6a3c6311, FUSE uses replace_page_cache() instead
    of add_to_page_cache(). Then, mem_cgroup_cache_charge() is not
    called against FUSE's pages from splice.

    So, Now, mem_cgroup_cache_charge() doesn't receive a page on LRU
    unless it's not SwapCache.
    For checking, WARN_ON_ONCE(PageLRU(page)) is added.

    Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    ---
    mm/memcontrol.c | 31 +++++++++----------------------
    1 files changed, 9 insertions(+), 22 deletions(-)

    diff --git a/mm/memcontrol.c b/mm/memcontrol.c
    index a9e92a6..947c62c 100644
    --- a/mm/memcontrol.c
    +++ b/mm/memcontrol.c
    @@ -2710,6 +2710,7 @@ int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm,
    gfp_t gfp_mask)
    {
    struct mem_cgroup *memcg = NULL;
    + enum charge_type type = MEM_CGROUP_CHARGE_TYPE_CACHE;
    int ret;

    if (mem_cgroup_disabled())
    @@ -2719,31 +2720,17 @@ int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm,

    if (unlikely(!mm))
    mm = &init_mm;
    + if (!page_is_file_cache(page))
    + type = MEM_CGROUP_CHARGE_TYPE_SHMEM;

    - if (page_is_file_cache(page)) {
    - ret = __mem_cgroup_try_charge(mm, gfp_mask, 1, &memcg, true);
    - if (ret || !memcg)
    - return ret;
    -
    - /*
    - * FUSE reuses pages without going through the final
    - * put that would remove them from the LRU list, make
    - * sure that they get relinked properly.
    - */
    - __mem_cgroup_commit_charge_lrucare(page, memcg,
    - MEM_CGROUP_CHARGE_TYPE_CACHE);
    - return ret;
    - }
    - /* shmem */
    - if (PageSwapCache(page)) {
    + if (!PageSwapCache(page)) {
    + ret = mem_cgroup_charge_common(page, mm, gfp_mask, type);
    + WARN_ON_ONCE(PageLRU(page));
    + } else { /* page is swapcache/shmem */
    ret = mem_cgroup_try_charge_swapin(mm, page, gfp_mask, &memcg);
    if (!ret)
    - __mem_cgroup_commit_charge_swapin(page, memcg,
    - MEM_CGROUP_CHARGE_TYPE_SHMEM);
    - } else
    - ret = mem_cgroup_charge_common(page, mm, gfp_mask,
    - MEM_CGROUP_CHARGE_TYPE_SHMEM);
    -
    + __mem_cgroup_commit_charge_swapin(page, memcg, type);
    + }
    return ret;
    }

    --
    1.7.4.1



    \
     
     \ /
      Last update: 2011-12-14 08:53    [W:0.043 / U:0.824 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site