]> git.baikalelectronics.ru Git - kernel.git/commit
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)
commit346e24ca9a29a54c6516043c3306f27255ed6f4a
treef75a19dcd1a37aff23dc43323b58f014b1297c6b
parentd0d6c3da92d21c3c5b95e3130c321f4c4c69e95c
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]