On Wed 14-12-11 16:49:22, KAMEZAWA Hiroyuki wrote: > From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> > > 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. too many negations makes it hard to read. What about: mem_cgroup_cache_charge gets pages that are not on LRU with exception of PageSwapCache pages. > For checking, WARN_ON_ONCE(PageLRU(page)) is added. > > Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> Makes sense. Acked-by: Michal Hocko <mhocko@xxxxxxx> > --- > 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 > > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majordomo@xxxxxxxxx. For more info on Linux MM, > see: http://www.linux-mm.org/ . > Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ > Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a> -- Michal Hocko SUSE Labs SUSE LINUX s.r.o. Lihovarska 1060/12 190 00 Praha 9 Czech Republic -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>