Commit 4101b624 authored by Vladimir Davydov's avatar Vladimir Davydov Committed by Linus Torvalds

fs: consolidate {nr,free}_cached_objects args in shrink_control

We are going to make FS shrinkers memcg-aware.  To achieve that, we will
have to pass the memcg to scan to the nr_cached_objects and
free_cached_objects VFS methods, which currently take only the NUMA node
to scan.  Since the shrink_control structure already holds the node, and
the memcg to scan will be added to it when we introduce memcg-aware
vmscan, let us consolidate the methods' arguments in this structure to
keep things clean.
Signed-off-by: default avatarVladimir Davydov <vdavydov@parallels.com>
Suggested-by: default avatarDave Chinner <david@fromorbit.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@suse.cz>
Cc: Greg Thelen <gthelen@google.com>
Cc: Glauber Costa <glommer@gmail.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Christoph Lameter <cl@linux.com>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: David Rientjes <rientjes@google.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 503c358c
...@@ -75,7 +75,7 @@ static unsigned long super_cache_scan(struct shrinker *shrink, ...@@ -75,7 +75,7 @@ static unsigned long super_cache_scan(struct shrinker *shrink,
return SHRINK_STOP; return SHRINK_STOP;
if (sb->s_op->nr_cached_objects) if (sb->s_op->nr_cached_objects)
fs_objects = sb->s_op->nr_cached_objects(sb, sc->nid); fs_objects = sb->s_op->nr_cached_objects(sb, sc);
inodes = list_lru_shrink_count(&sb->s_inode_lru, sc); inodes = list_lru_shrink_count(&sb->s_inode_lru, sc);
dentries = list_lru_shrink_count(&sb->s_dentry_lru, sc); dentries = list_lru_shrink_count(&sb->s_dentry_lru, sc);
...@@ -97,9 +97,10 @@ static unsigned long super_cache_scan(struct shrinker *shrink, ...@@ -97,9 +97,10 @@ static unsigned long super_cache_scan(struct shrinker *shrink,
sc->nr_to_scan = inodes; sc->nr_to_scan = inodes;
freed += prune_icache_sb(sb, sc); freed += prune_icache_sb(sb, sc);
if (fs_objects) if (fs_objects) {
freed += sb->s_op->free_cached_objects(sb, fs_objects, sc->nr_to_scan = fs_objects;
sc->nid); freed += sb->s_op->free_cached_objects(sb, sc);
}
drop_super(sb); drop_super(sb);
return freed; return freed;
...@@ -122,8 +123,7 @@ static unsigned long super_cache_count(struct shrinker *shrink, ...@@ -122,8 +123,7 @@ static unsigned long super_cache_count(struct shrinker *shrink,
* s_op->nr_cached_objects(). * s_op->nr_cached_objects().
*/ */
if (sb->s_op && sb->s_op->nr_cached_objects) if (sb->s_op && sb->s_op->nr_cached_objects)
total_objects = sb->s_op->nr_cached_objects(sb, total_objects = sb->s_op->nr_cached_objects(sb, sc);
sc->nid);
total_objects += list_lru_shrink_count(&sb->s_dentry_lru, sc); total_objects += list_lru_shrink_count(&sb->s_dentry_lru, sc);
total_objects += list_lru_shrink_count(&sb->s_inode_lru, sc); total_objects += list_lru_shrink_count(&sb->s_inode_lru, sc);
......
...@@ -1537,7 +1537,7 @@ xfs_fs_mount( ...@@ -1537,7 +1537,7 @@ xfs_fs_mount(
static long static long
xfs_fs_nr_cached_objects( xfs_fs_nr_cached_objects(
struct super_block *sb, struct super_block *sb,
int nid) struct shrink_control *sc)
{ {
return xfs_reclaim_inodes_count(XFS_M(sb)); return xfs_reclaim_inodes_count(XFS_M(sb));
} }
...@@ -1545,10 +1545,9 @@ xfs_fs_nr_cached_objects( ...@@ -1545,10 +1545,9 @@ xfs_fs_nr_cached_objects(
static long static long
xfs_fs_free_cached_objects( xfs_fs_free_cached_objects(
struct super_block *sb, struct super_block *sb,
long nr_to_scan, struct shrink_control *sc)
int nid)
{ {
return xfs_reclaim_inodes_nr(XFS_M(sb), nr_to_scan); return xfs_reclaim_inodes_nr(XFS_M(sb), sc->nr_to_scan);
} }
static const struct super_operations xfs_super_operations = { static const struct super_operations xfs_super_operations = {
......
...@@ -1635,8 +1635,10 @@ struct super_operations { ...@@ -1635,8 +1635,10 @@ struct super_operations {
struct dquot **(*get_dquots)(struct inode *); struct dquot **(*get_dquots)(struct inode *);
#endif #endif
int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t); int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
long (*nr_cached_objects)(struct super_block *, int); long (*nr_cached_objects)(struct super_block *,
long (*free_cached_objects)(struct super_block *, long, int); struct shrink_control *);
long (*free_cached_objects)(struct super_block *,
struct shrink_control *);
}; };
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment