aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDan Magenheimer <dan.magenheimer@oracle.com>2012-01-25 16:58:46 -0800
committerSimon Shields <keepcalm444@gmail.com>2016-06-12 21:20:21 +1000
commit1e291c9a70e255278ddb451097f0d65126556b61 (patch)
treefbfa0000179bd3e5d59a4cd44463e661663077a7 /drivers
parentc72e09b31537cd8c558f70fd00d40c755e670114 (diff)
downloadkernel_samsung_smdk4412-1e291c9a70e255278ddb451097f0d65126556b61.tar.gz
kernel_samsung_smdk4412-1e291c9a70e255278ddb451097f0d65126556b61.tar.bz2
kernel_samsung_smdk4412-1e291c9a70e255278ddb451097f0d65126556b61.zip
mm: implement WasActive page flag (for improving cleancache)
(Feedback welcome if there is a different/better way to do this without using a page flag!) Since about 2.6.27, the page replacement algorithm maintains an "active" bit to help decide which pages are most eligible to reclaim, see http://linux-mm.org/PageReplacementDesign This "active' information is also useful to cleancache but is lost by the time that cleancache has the opportunity to preserve the pageful of data. This patch adds a new page flag "WasActive" to retain the state. The flag may possibly be useful elsewhere. It is up to each cleancache backend to utilize the bit as it desires. The matching patch for zcache is included here for clarification/discussion purposes, though it will need to go through GregKH and the staging tree. The patch resolves issues reported with cleancache which occur especially during streaming workloads on older processors, see https://lkml.org/lkml/2011/8/17/351 Signed-off-by: Dan Magenheimer <dan.magenheimer@oracle.com> Conflicts: include/linux/page-flags.h Change-Id: I0fcb2302a7b9c5e66db005229f679baee90f262f Conflicts: include/linux/page-flags.h
Diffstat (limited to 'drivers')
-rw-r--r--drivers/staging/zcache/zcache-main.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/staging/zcache/zcache-main.c b/drivers/staging/zcache/zcache-main.c
index 61cce6bdc6c..eb65043ce4e 100644
--- a/drivers/staging/zcache/zcache-main.c
+++ b/drivers/staging/zcache/zcache-main.c
@@ -1748,6 +1748,8 @@ static void zcache_cleancache_put_page(int pool_id,
u32 ind = (u32) index;
struct tmem_oid oid = *(struct tmem_oid *)&key;
+ if (!PageWasActive(page))
+ return;
if (likely(ind == index))
(void)zcache_put_page(LOCAL_CLIENT, pool_id, &oid, index, page);
}
@@ -1762,6 +1764,8 @@ static int zcache_cleancache_get_page(int pool_id,
if (likely(ind == index))
ret = zcache_get_page(LOCAL_CLIENT, pool_id, &oid, index, page);
+ if (ret == 0)
+ SetPageWasActive(page);
return ret;
}