superblock: introduce per-sb cache shrinker infrastructure
authorDave Chinner <dchinner@redhat.com>
Fri, 8 Jul 2011 04:14:42 +0000 (14:14 +1000)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 21 Jul 2011 00:47:10 +0000 (20:47 -0400)
commitb0d40c92adafde7c2d81203ce7c1c69275f41140
treef75a19dcd1a37aff23dc43323b58f014b1297c6b
parent12ad3ab66103e6582ca69c0c9de18b13487eaaef
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>
fs/dcache.c
fs/inode.c
fs/super.c
include/linux/fs.h
include/linux/mm.h
include/linux/shrinker.h [new file with mode: 0644]