lkml.org 
[lkml]   [2014]   [Feb]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH -mm v15 06/13] fs: consolidate {nr,free}_cached_objects args in shrink_control
    Date
    We are going to make the FS shrinker 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 as we introduce memcg-aware
    vmscan, let us consolidate the methods' arguments in this structure to
    keep things clean.

    Thanks to David Chinner for the tip.

    Signed-off-by: Vladimir Davydov <vdavydov@parallels.com>
    Cc: Glauber Costa <glommer@openvz.org>
    Cc: Dave Chinner <dchinner@redhat.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    ---
    fs/super.c | 12 ++++++------
    fs/xfs/xfs_super.c | 7 +++----
    include/linux/fs.h | 6 ++++--
    3 files changed, 13 insertions(+), 12 deletions(-)

    diff --git a/fs/super.c b/fs/super.c
    index 0688f3eaf012..ff9ff5fad70c 100644
    --- a/fs/super.c
    +++ b/fs/super.c
    @@ -76,7 +76,7 @@ static unsigned long super_cache_scan(struct shrinker *shrink,
    return SHRINK_STOP;

    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);
    dentries = list_lru_shrink_count(&sb->s_dentry_lru, sc);
    @@ -96,9 +96,10 @@ static unsigned long super_cache_scan(struct shrinker *shrink,
    sc->nr_to_scan = inodes;
    freed += prune_icache_sb(sb, sc);

    - if (fs_objects)
    - freed += sb->s_op->free_cached_objects(sb, fs_objects,
    - sc->nid);
    + if (fs_objects) {
    + sc->nr_to_scan = fs_objects;
    + freed += sb->s_op->free_cached_objects(sb, sc);
    + }

    drop_super(sb);
    return freed;
    @@ -116,8 +117,7 @@ static unsigned long super_cache_count(struct shrinker *shrink,
    return 0;

    if (sb->s_op && sb->s_op->nr_cached_objects)
    - total_objects = sb->s_op->nr_cached_objects(sb,
    - sc->nid);
    + total_objects = sb->s_op->nr_cached_objects(sb, sc);

    total_objects += list_lru_shrink_count(&sb->s_dentry_lru, sc);
    total_objects += list_lru_shrink_count(&sb->s_inode_lru, sc);
    diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
    index 01ee44444885..4bc182b29c8f 100644
    --- a/fs/xfs/xfs_super.c
    +++ b/fs/xfs/xfs_super.c
    @@ -1524,7 +1524,7 @@ xfs_fs_mount(
    static long
    xfs_fs_nr_cached_objects(
    struct super_block *sb,
    - int nid)
    + struct shrink_control *sc)
    {
    return xfs_reclaim_inodes_count(XFS_M(sb));
    }
    @@ -1532,10 +1532,9 @@ xfs_fs_nr_cached_objects(
    static long
    xfs_fs_free_cached_objects(
    struct super_block *sb,
    - long nr_to_scan,
    - int nid)
    + struct shrink_control *sc)
    {
    - 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 = {
    diff --git a/include/linux/fs.h b/include/linux/fs.h
    index 9b613a828b53..3a87b0254408 100644
    --- a/include/linux/fs.h
    +++ b/include/linux/fs.h
    @@ -1624,8 +1624,10 @@ struct super_operations {
    ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
    #endif
    int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
    - long (*nr_cached_objects)(struct super_block *, int);
    - long (*free_cached_objects)(struct super_block *, long, int);
    + long (*nr_cached_objects)(struct super_block *,
    + struct shrink_control *);
    + long (*free_cached_objects)(struct super_block *,
    + struct shrink_control *);
    };

    /*
    --
    1.7.10.4


    \
     
     \ /
      Last update: 2014-02-05 22:21    [W:3.481 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site