From mboxrd@z Thu Jan 1 00:00:00 1970 From: Johannes Weiner Subject: Re: [BUGFIX][PATCH] add mem_cgroup_replace_page_cache. Date: Wed, 7 Dec 2011 10:21:07 +0100 Message-ID: <20111207092107.GB12673@cmpxchg.org> References: <20111206123923.1432ab52.kamezawa.hiroyu@jp.fujitsu.com> Mime-Version: 1.0 Return-path: Content-Disposition: inline In-Reply-To: <20111206123923.1432ab52.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org> Sender: cgroups-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-ID: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: KAMEZAWA Hiroyuki Cc: "linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Miklos Szeredi , "akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org" , "linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org" , cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Michal Hocko , Hugh Dickins On Tue, Dec 06, 2011 at 12:39:23PM +0900, KAMEZAWA Hiroyuki wrote: > > Hm, is this too naive ? better idea is welcome. > == > >From 33638351c5cd28af9f47f9ab1c44eeb1f63d9964 Mon Sep 17 00:00:00 2001 > From: KAMEZAWA Hiroyuki > Date: Tue, 6 Dec 2011 12:32:32 +0900 > Subject: [PATCH] memcg: add mem_cgroup_replace_page_cache() for fixing LRU issue. > > commit ef6a3c6311 adds a function replace_page_cache_page(). This > function replaces a page in radix-tree with a new page. > At doing this, memory cgroup need to fix up the accounting information. > memcg need to check PCG_USED bit etc. > > In some(many?) case, 'newpage' is on LRU before calling replace_page_cache(). > So, memcg's LRU accounting information should be fixed, too. > > This patch adds mem_cgroup_replace_page_cache() and removing old hooks. > In that function, old pages will be unaccounted without touching res_counter > and new page will be accounted to the memcg (of old page). At overwriting > pc->mem_cgroup of newpage, take zone->lru_lock and avoid race with > LRU handling. > > Background: > replace_page_cache_page() is called by FUSE code in its splice() handling. > Here, 'newpage' is replacing oldpage but this newpage is not a newly allocated > page and may be on LRU. LRU mis-accounting will be critical for memory cgroup > because rmdir() checks the whole LRU is empty and there is no account leak. > If a page is on the other LRU than it should be, rmdir() will fail. > > Signed-off-by: KAMEZAWA Hiroyuki I think this is okay. It's a tiny bit unfortunate that the migration code is more or less duplicated with some optimizations, but I fear the other solutions would be more complex and thus not adequate as a bug fix. Acked-by: Johannes Weiner -- To unsubscribe from this list: send the line "unsubscribe cgroups" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html