diff options
author | Dave Chinner <dchinner@redhat.com> | 2013-08-27 20:17:57 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-09-10 18:56:30 -0400 |
commit | 0a234c6dcb79a270803f5c9773ed650b78730962 (patch) | |
tree | 8f93bd04d5c01a32dc78617c04dc770dc4b86883 /fs/dcache.c | |
parent | 24f7c6b981fb70084757382da464ea85d72af300 (diff) |
shrinker: convert superblock shrinkers to new API
Convert superblock shrinker to use the new count/scan API, and propagate
the API changes through to the filesystem callouts. The filesystem
callouts already use a count/scan API, so it's just changing counters to
longs to match the VM API.
This requires the dentry and inode shrinker callouts to be converted to
the count/scan API. This is mainly a mechanical change.
[glommer@openvz.org: use mult_frac for fractional proportions, build fixes]
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Glauber Costa <glommer@openvz.org>
Acked-by: Mel Gorman <mgorman@suse.de>
Cc: "Theodore Ts'o" <tytso@mit.edu>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Cc: Arve Hjønnevåg <arve@android.com>
Cc: Carlos Maiolino <cmaiolino@redhat.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Chuck Lever <chuck.lever@oracle.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: David Rientjes <rientjes@google.com>
Cc: Gleb Natapov <gleb@redhat.com>
Cc: Greg Thelen <gthelen@google.com>
Cc: J. Bruce Fields <bfields@redhat.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Jerome Glisse <jglisse@redhat.com>
Cc: John Stultz <john.stultz@linaro.org>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Kent Overstreet <koverstreet@google.com>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Steven Whitehouse <swhiteho@redhat.com>
Cc: Thomas Hellstrom <thellstrom@vmware.com>
Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/dcache.c')
-rw-r--r-- | fs/dcache.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/dcache.c b/fs/dcache.c index 509b49410943..77d466b13fef 100644 --- a/fs/dcache.c +++ b/fs/dcache.c | |||
@@ -913,11 +913,12 @@ static void shrink_dentry_list(struct list_head *list) | |||
913 | * This function may fail to free any resources if all the dentries are in | 913 | * This function may fail to free any resources if all the dentries are in |
914 | * use. | 914 | * use. |
915 | */ | 915 | */ |
916 | void prune_dcache_sb(struct super_block *sb, int count) | 916 | long prune_dcache_sb(struct super_block *sb, unsigned long nr_to_scan) |
917 | { | 917 | { |
918 | struct dentry *dentry; | 918 | struct dentry *dentry; |
919 | LIST_HEAD(referenced); | 919 | LIST_HEAD(referenced); |
920 | LIST_HEAD(tmp); | 920 | LIST_HEAD(tmp); |
921 | long freed = 0; | ||
921 | 922 | ||
922 | relock: | 923 | relock: |
923 | spin_lock(&sb->s_dentry_lru_lock); | 924 | spin_lock(&sb->s_dentry_lru_lock); |
@@ -942,7 +943,8 @@ relock: | |||
942 | this_cpu_dec(nr_dentry_unused); | 943 | this_cpu_dec(nr_dentry_unused); |
943 | sb->s_nr_dentry_unused--; | 944 | sb->s_nr_dentry_unused--; |
944 | spin_unlock(&dentry->d_lock); | 945 | spin_unlock(&dentry->d_lock); |
945 | if (!--count) | 946 | freed++; |
947 | if (!--nr_to_scan) | ||
946 | break; | 948 | break; |
947 | } | 949 | } |
948 | cond_resched_lock(&sb->s_dentry_lru_lock); | 950 | cond_resched_lock(&sb->s_dentry_lru_lock); |
@@ -952,6 +954,7 @@ relock: | |||
952 | spin_unlock(&sb->s_dentry_lru_lock); | 954 | spin_unlock(&sb->s_dentry_lru_lock); |
953 | 955 | ||
954 | shrink_dentry_list(&tmp); | 956 | shrink_dentry_list(&tmp); |
957 | return freed; | ||
955 | } | 958 | } |
956 | 959 | ||
957 | /* | 960 | /* |