From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754906Ab0CGU6q (ORCPT ); Sun, 7 Mar 2010 15:58:46 -0500 Received: from trinity.develer.com ([83.149.158.210]:38755 "EHLO trinity.develer.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754832Ab0CGU6n (ORCPT ); Sun, 7 Mar 2010 15:58:43 -0500 From: Andrea Righi To: KAMEZAWA Hiroyuki , Balbir Singh , Daisuke Nishimura Cc: Vivek Goyal , Peter Zijlstra , Trond Myklebust , Suleiman Souhlal , Greg Thelen , "Kirill A. Shutemov" , Andrew Morton , containers@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Andrea Righi , KAMEZAWA Hiroyuki Subject: [PATCH -mmotm 2/4] page_cgroup: introduce file cache flags Date: Sun, 7 Mar 2010 21:57:52 +0100 Message-Id: <1267995474-9117-3-git-send-email-arighi@develer.com> X-Mailer: git-send-email 1.6.3.3 In-Reply-To: <1267995474-9117-1-git-send-email-arighi@develer.com> References: <1267995474-9117-1-git-send-email-arighi@develer.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Introduce page_cgroup flags to keep track of file cache pages. Signed-off-by: KAMEZAWA Hiroyuki Signed-off-by: Andrea Righi --- include/linux/page_cgroup.h | 45 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 45 insertions(+), 0 deletions(-) diff --git a/include/linux/page_cgroup.h b/include/linux/page_cgroup.h index 30b0813..dc66bee 100644 --- a/include/linux/page_cgroup.h +++ b/include/linux/page_cgroup.h @@ -39,6 +39,12 @@ enum { PCG_CACHE, /* charged as cache */ PCG_USED, /* this object is in use. */ PCG_ACCT_LRU, /* page has been accounted for */ + PCG_MIGRATE_LOCK, /* used for mutual execution of account migration */ + PCG_ACCT_FILE_MAPPED, /* page is accounted as file rss*/ + PCG_ACCT_DIRTY, /* page is dirty */ + PCG_ACCT_WRITEBACK, /* page is being written back to disk */ + PCG_ACCT_WRITEBACK_TEMP, /* page is used as temporary buffer for FUSE */ + PCG_ACCT_UNSTABLE_NFS, /* NFS page not yet committed to the server */ }; #define TESTPCGFLAG(uname, lname) \ @@ -73,6 +79,27 @@ CLEARPCGFLAG(AcctLRU, ACCT_LRU) TESTPCGFLAG(AcctLRU, ACCT_LRU) TESTCLEARPCGFLAG(AcctLRU, ACCT_LRU) +/* File cache and dirty memory flags */ +TESTPCGFLAG(FileMapped, ACCT_FILE_MAPPED) +SETPCGFLAG(FileMapped, ACCT_FILE_MAPPED) +CLEARPCGFLAG(FileMapped, ACCT_FILE_MAPPED) + +TESTPCGFLAG(Dirty, ACCT_DIRTY) +SETPCGFLAG(Dirty, ACCT_DIRTY) +CLEARPCGFLAG(Dirty, ACCT_DIRTY) + +TESTPCGFLAG(Writeback, ACCT_WRITEBACK) +SETPCGFLAG(Writeback, ACCT_WRITEBACK) +CLEARPCGFLAG(Writeback, ACCT_WRITEBACK) + +TESTPCGFLAG(WritebackTemp, ACCT_WRITEBACK_TEMP) +SETPCGFLAG(WritebackTemp, ACCT_WRITEBACK_TEMP) +CLEARPCGFLAG(WritebackTemp, ACCT_WRITEBACK_TEMP) + +TESTPCGFLAG(UnstableNFS, ACCT_UNSTABLE_NFS) +SETPCGFLAG(UnstableNFS, ACCT_UNSTABLE_NFS) +CLEARPCGFLAG(UnstableNFS, ACCT_UNSTABLE_NFS) + static inline int page_cgroup_nid(struct page_cgroup *pc) { return page_to_nid(pc->page); @@ -83,6 +110,9 @@ static inline enum zone_type page_cgroup_zid(struct page_cgroup *pc) return page_zonenum(pc->page); } +/* + * lock_page_cgroup() should not be held under mapping->tree_lock + */ static inline void lock_page_cgroup(struct page_cgroup *pc) { bit_spin_lock(PCG_LOCK, &pc->flags); @@ -93,6 +123,21 @@ static inline void unlock_page_cgroup(struct page_cgroup *pc) bit_spin_unlock(PCG_LOCK, &pc->flags); } +/* + * This lock is not be lock for charge/uncharge but for account moving. + * i.e. overwrite pc->mem_cgroup. The lock owner should guarantee by itself + * the page is uncharged while we hold this. + */ +static inline void lock_page_cgroup_migrate(struct page_cgroup *pc) +{ + bit_spin_lock(PCG_MIGRATE_LOCK, &pc->flags); +} + +static inline void unlock_page_cgroup_migrate(struct page_cgroup *pc) +{ + bit_spin_unlock(PCG_MIGRATE_LOCK, &pc->flags); +} + #else /* CONFIG_CGROUP_MEM_RES_CTLR */ struct page_cgroup; -- 1.6.3.3