lkml.org 
[lkml]   [2023]   [May]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6/8] xfs: introduce xfs_fs_destroy_super()
    Date
    From: Kirill Tkhai <tkhai@ya.ru>

    xfs_fs_nr_cached_objects() touches sb->s_fs_info,
    and this patch makes it to be destructed later.

    After this patch xfs_fs_nr_cached_objects() is safe
    for splitting unregister_shrinker(): mp->m_perag_tree
    is stable till destroy_super_work(), while iteration
    over it is already RCU-protected by internal XFS
    business.

    Signed-off-by: Kirill Tkhai <tkhai@ya.ru>
    Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
    ---
    fs/xfs/xfs_super.c | 25 ++++++++++++++++++++++---
    1 file changed, 22 insertions(+), 3 deletions(-)

    diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
    index 7e706255f165..694616524c76 100644
    --- a/fs/xfs/xfs_super.c
    +++ b/fs/xfs/xfs_super.c
    @@ -743,11 +743,18 @@ xfs_fs_drop_inode(
    }

    static void
    -xfs_mount_free(
    +xfs_free_names(
    struct xfs_mount *mp)
    {
    kfree(mp->m_rtname);
    kfree(mp->m_logname);
    +}
    +
    +static void
    +xfs_mount_free(
    + struct xfs_mount *mp)
    +{
    + xfs_free_names(mp);
    kmem_free(mp);
    }

    @@ -1136,8 +1143,19 @@ xfs_fs_put_super(
    xfs_destroy_mount_workqueues(mp);
    xfs_close_devices(mp);

    - sb->s_fs_info = NULL;
    - xfs_mount_free(mp);
    + xfs_free_names(mp);
    +}
    +
    +static void
    +xfs_fs_destroy_super(
    + struct super_block *sb)
    +{
    + if (sb->s_fs_info) {
    + struct xfs_mount *mp = XFS_M(sb);
    +
    + kmem_free(mp);
    + sb->s_fs_info = NULL;
    + }
    }

    static long
    @@ -1165,6 +1183,7 @@ static const struct super_operations xfs_super_operations = {
    .dirty_inode = xfs_fs_dirty_inode,
    .drop_inode = xfs_fs_drop_inode,
    .put_super = xfs_fs_put_super,
    + .destroy_super = xfs_fs_destroy_super,
    .sync_fs = xfs_fs_sync_fs,
    .freeze_fs = xfs_fs_freeze,
    .unfreeze_fs = xfs_fs_unfreeze,
    --
    2.30.2
    \
     
     \ /
      Last update: 2023-05-31 11:59    [W:5.260 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site