Message ID | 20231009-vfs-fixes-reiserfs-v1-2-723a2f1132ce@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | reiserfs: fixes | expand |
On Mon 09-10-23 14:33:39, Christian Brauner wrote: > Currently the reiserfs info is free in multiple locations: > > * in reiserfs_fill_super() if reiserfs_fill_super() fails > * in reiserfs_put_super() when reiserfs is shut down and > reiserfs_fill_super() had succeeded > > Stop duplicating this logic and always free reiserfs info in > reiserfs_kill_sb(). > > Signed-off-by: Christian Brauner <brauner@kernel.org> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > --- > fs/reiserfs/super.c | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c > index 7eaf36b3de12..6db8ed10a78d 100644 > --- a/fs/reiserfs/super.c > +++ b/fs/reiserfs/super.c > @@ -549,7 +549,9 @@ int remove_save_link(struct inode *inode, int truncate) > > static void reiserfs_kill_sb(struct super_block *s) > { > - if (REISERFS_SB(s)) { > + struct reiserfs_sb_info *sbi = REISERFS_SB(s); > + > + if (sbi) { > reiserfs_proc_info_done(s); > /* > * Force any pending inode evictions to occur now. Any > @@ -561,13 +563,16 @@ static void reiserfs_kill_sb(struct super_block *s) > */ > shrink_dcache_sb(s); > > - dput(REISERFS_SB(s)->xattr_root); > - REISERFS_SB(s)->xattr_root = NULL; > - dput(REISERFS_SB(s)->priv_root); > - REISERFS_SB(s)->priv_root = NULL; > + dput(sbi->xattr_root); > + sbi->xattr_root = NULL; > + dput(sbi->priv_root); > + sbi->priv_root = NULL; > } > > kill_block_super(s); > + > + kfree(sbi); > + s->s_fs_info = NULL; > } > > #ifdef CONFIG_QUOTA > @@ -630,8 +635,6 @@ static void reiserfs_put_super(struct super_block *s) > mutex_destroy(&REISERFS_SB(s)->lock); > destroy_workqueue(REISERFS_SB(s)->commit_wq); > kfree(REISERFS_SB(s)->s_jdev); > - kfree(s->s_fs_info); > - s->s_fs_info = NULL; > } > > static struct kmem_cache *reiserfs_inode_cachep; > @@ -2240,9 +2243,6 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent) > } > #endif > kfree(sbi->s_jdev); > - kfree(sbi); > - > - s->s_fs_info = NULL; > return errval; > } > > > -- > 2.34.1 >
diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c index 7eaf36b3de12..6db8ed10a78d 100644 --- a/fs/reiserfs/super.c +++ b/fs/reiserfs/super.c @@ -549,7 +549,9 @@ int remove_save_link(struct inode *inode, int truncate) static void reiserfs_kill_sb(struct super_block *s) { - if (REISERFS_SB(s)) { + struct reiserfs_sb_info *sbi = REISERFS_SB(s); + + if (sbi) { reiserfs_proc_info_done(s); /* * Force any pending inode evictions to occur now. Any @@ -561,13 +563,16 @@ static void reiserfs_kill_sb(struct super_block *s) */ shrink_dcache_sb(s); - dput(REISERFS_SB(s)->xattr_root); - REISERFS_SB(s)->xattr_root = NULL; - dput(REISERFS_SB(s)->priv_root); - REISERFS_SB(s)->priv_root = NULL; + dput(sbi->xattr_root); + sbi->xattr_root = NULL; + dput(sbi->priv_root); + sbi->priv_root = NULL; } kill_block_super(s); + + kfree(sbi); + s->s_fs_info = NULL; } #ifdef CONFIG_QUOTA @@ -630,8 +635,6 @@ static void reiserfs_put_super(struct super_block *s) mutex_destroy(&REISERFS_SB(s)->lock); destroy_workqueue(REISERFS_SB(s)->commit_wq); kfree(REISERFS_SB(s)->s_jdev); - kfree(s->s_fs_info); - s->s_fs_info = NULL; } static struct kmem_cache *reiserfs_inode_cachep; @@ -2240,9 +2243,6 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent) } #endif kfree(sbi->s_jdev); - kfree(sbi); - - s->s_fs_info = NULL; return errval; }
Currently the reiserfs info is free in multiple locations: * in reiserfs_fill_super() if reiserfs_fill_super() fails * in reiserfs_put_super() when reiserfs is shut down and reiserfs_fill_super() had succeeded Stop duplicating this logic and always free reiserfs info in reiserfs_kill_sb(). Signed-off-by: Christian Brauner <brauner@kernel.org> --- fs/reiserfs/super.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)