aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/fs.h
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2011-07-08 00:14:42 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2011-07-20 20:47:10 -0400
commitb0d40c92adafde7c2d81203ce7c1c69275f41140 (patch)
treef75a19dcd1a37aff23dc43323b58f014b1297c6b /include/linux/fs.h
parent12ad3ab66103e6582ca69c0c9de18b13487eaaef (diff)
superblock: introduce per-sb cache shrinker infrastructure
With context based shrinkers, we can implement a per-superblock shrinker that shrinks the caches attached to the superblock. We currently have global shrinkers for the inode and dentry caches that split up into per-superblock operations via a coarse proportioning method that does not batch very well. The global shrinkers also have a dependency - dentries pin inodes - so we have to be very careful about how we register the global shrinkers so that the implicit call order is always correct. With a per-sb shrinker callout, we can encode this dependency directly into the per-sb shrinker, hence avoiding the need for strictly ordering shrinker registrations. We also have no need for any proportioning code for the shrinker subsystem already provides this functionality across all shrinkers. Allowing the shrinker to operate on a single superblock at a time means that we do less superblock list traversals and locking and reclaim should batch more effectively. This should result in less CPU overhead for reclaim and potentially faster reclaim of items from each filesystem. Signed-off-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'include/linux/fs.h')
-rw-r--r--include/linux/fs.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 460d2cc21ec6..d7f35e90b84a 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -393,6 +393,7 @@ struct inodes_stat_t {
393#include <linux/semaphore.h> 393#include <linux/semaphore.h>
394#include <linux/fiemap.h> 394#include <linux/fiemap.h>
395#include <linux/rculist_bl.h> 395#include <linux/rculist_bl.h>
396#include <linux/shrinker.h>
396#include <linux/atomic.h> 397#include <linux/atomic.h>
397 398
398#include <asm/byteorder.h> 399#include <asm/byteorder.h>
@@ -1444,8 +1445,14 @@ struct super_block {
1444 * Saved pool identifier for cleancache (-1 means none) 1445 * Saved pool identifier for cleancache (-1 means none)
1445 */ 1446 */
1446 int cleancache_poolid; 1447 int cleancache_poolid;
1448
1449 struct shrinker s_shrink; /* per-sb shrinker handle */
1447}; 1450};
1448 1451
1452/* superblock cache pruning functions */
1453extern void prune_icache_sb(struct super_block *sb, int nr_to_scan);
1454extern void prune_dcache_sb(struct super_block *sb, int nr_to_scan);
1455
1449extern struct timespec current_fs_time(struct super_block *sb); 1456extern struct timespec current_fs_time(struct super_block *sb);
1450 1457
1451/* 1458/*