lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <0d787a93-9795-3a92-14fc-822d19b9d682@huaweicloud.com> Date: Sat, 12 Aug 2023 18:19:02 +0800 From: Wu Bo <wubo@...weicloud.com> To: linux-ext4@...r.kernel.org, Theodore Ts'o <tytso@....edu>, Andreas Dilger <adilger.kernel@...ger.ca> Cc: wubo40@...wei.com Subject: Re: [PATCH] ext4: Adds helpers functions for s_mount_state On 2023/8/9 15:11, Wu Bo wrote: > From: Wu Bo <wubo40@...wei.com> > > This patch adds helpers functions for s_mount_state. > > Signed-off-by: Wu Bo <wubo40@...wei.com> > --- > fs/ext4/balloc.c | 2 +- > fs/ext4/ext4.h | 14 ++++++++++++++ > fs/ext4/ext4_jbd2.c | 2 +- > fs/ext4/extents_status.c | 16 ++++++++-------- > fs/ext4/fast_commit.c | 6 +++--- > fs/ext4/ialloc.c | 14 +++++++------- > fs/ext4/inode.c | 12 ++++++------ > fs/ext4/mballoc.c | 8 ++++---- > fs/ext4/namei.c | 4 ++-- > fs/ext4/orphan.c | 7 ++++--- > fs/ext4/resize.c | 4 ++-- > fs/ext4/super.c | 20 ++++++++++---------- > 12 files changed, 62 insertions(+), 47 deletions(-) > > diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c > index 1f72f977c6db..9baa88cacbe0 100644 > --- a/fs/ext4/balloc.c > +++ b/fs/ext4/balloc.c > @@ -402,7 +402,7 @@ static int ext4_validate_block_bitmap(struct super_block *sb, > ext4_fsblk_t blk; > struct ext4_group_info *grp; > > - if (EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY) > + if (ext4_test_mount_state(sb, EXT4_FC_REPLAY)) > return 0; > > grp = ext4_get_group_info(sb, block_group); > diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h > index 0a2d55faa095..5b1995986704 100644 > --- a/fs/ext4/ext4.h > +++ b/fs/ext4/ext4.h > @@ -1817,6 +1817,20 @@ static inline int ext4_test_mount_flag(struct super_block *sb, int bit) > return test_bit(bit, &EXT4_SB(sb)->s_mount_flags); > } > > +static inline void ext4_set_mount_state(struct super_block *sb, int state) > +{ > + EXT4_SB(sb)->s_mount_state |= state; > +} > + > +static inline void ext4_clear_mount_state(struct super_block *sb, int state) > +{ > + EXT4_SB(sb)->s_mount_state &= ~state; > +} > + > +static inline int ext4_test_mount_state(struct super_block *sb, int state) > +{ > + return EXT4_SB(sb)->s_mount_state & state; > +} > > /* > * Simulate_fail codes > diff --git a/fs/ext4/ext4_jbd2.c b/fs/ext4/ext4_jbd2.c > index 77f318ec8abb..6ba75ae2c188 100644 > --- a/fs/ext4/ext4_jbd2.c > +++ b/fs/ext4/ext4_jbd2.c > @@ -106,7 +106,7 @@ handle_t *__ext4_journal_start_sb(struct inode *inode, > return ERR_PTR(err); > > journal = EXT4_SB(sb)->s_journal; > - if (!journal || (EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY)) > + if (!journal || ext4_test_mount_state(sb, EXT4_FC_REPLAY)) > return ext4_get_nojournal(); > return jbd2__journal_start(journal, blocks, rsv_blocks, revoke_creds, > GFP_NOFS, type, line); > diff --git a/fs/ext4/extents_status.c b/fs/ext4/extents_status.c > index 9b5b8951afb4..b37b9c29c9fa 100644 > --- a/fs/ext4/extents_status.c > +++ b/fs/ext4/extents_status.c > @@ -309,7 +309,7 @@ void ext4_es_find_extent_range(struct inode *inode, > ext4_lblk_t lblk, ext4_lblk_t end, > struct extent_status *es) > { > - if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) > + if (ext4_test_mount_state(inode->i_sb, EXT4_FC_REPLAY)) > return; > > trace_ext4_es_find_extent_range_enter(inode, lblk); > @@ -362,7 +362,7 @@ bool ext4_es_scan_range(struct inode *inode, > { > bool ret; > > - if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) > + if (ext4_test_mount_state(inode->i_sb, EXT4_FC_REPLAY)) > return false; > > read_lock(&EXT4_I(inode)->i_es_lock); > @@ -408,7 +408,7 @@ bool ext4_es_scan_clu(struct inode *inode, > { > bool ret; > > - if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) > + if (ext4_test_mount_state(inode->i_sb, EXT4_FC_REPLAY)) > return false; > > read_lock(&EXT4_I(inode)->i_es_lock); > @@ -842,7 +842,7 @@ void ext4_es_insert_extent(struct inode *inode, ext4_lblk_t lblk, > struct extent_status *es1 = NULL; > struct extent_status *es2 = NULL; > > - if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) > + if (ext4_test_mount_state(inode->i_sb, EXT4_FC_REPLAY)) > return; > > es_debug("add [%u/%u) %llu %x to extent status tree of inode %lu\n", > @@ -917,7 +917,7 @@ void ext4_es_cache_extent(struct inode *inode, ext4_lblk_t lblk, > struct extent_status newes; > ext4_lblk_t end = lblk + len - 1; > > - if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) > + if (ext4_test_mount_state(inode->i_sb, EXT4_FC_REPLAY)) > return; > > newes.es_lblk = lblk; > @@ -955,7 +955,7 @@ int ext4_es_lookup_extent(struct inode *inode, ext4_lblk_t lblk, > struct rb_node *node; > int found = 0; > > - if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) > + if (ext4_test_mount_state(inode->i_sb, EXT4_FC_REPLAY)) > return 0; > > trace_ext4_es_lookup_extent_enter(inode, lblk); > @@ -1468,7 +1468,7 @@ void ext4_es_remove_extent(struct inode *inode, ext4_lblk_t lblk, > int reserved = 0; > struct extent_status *es = NULL; > > - if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) > + if (ext4_test_mount_state(inode->i_sb, EXT4_FC_REPLAY)) > return; > > trace_ext4_es_remove_extent(inode, lblk, len); > @@ -2024,7 +2024,7 @@ void ext4_es_insert_delayed_block(struct inode *inode, ext4_lblk_t lblk, > struct extent_status *es1 = NULL; > struct extent_status *es2 = NULL; > > - if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) > + if (ext4_test_mount_state(inode->i_sb, EXT4_FC_REPLAY)) > return; > > es_debug("add [%u/1) delayed to extent status tree of inode %lu\n", > diff --git a/fs/ext4/fast_commit.c b/fs/ext4/fast_commit.c > index b06de728b3b6..023e13ec9fdc 100644 > --- a/fs/ext4/fast_commit.c > +++ b/fs/ext4/fast_commit.c > @@ -232,7 +232,7 @@ __releases(&EXT4_SB(inode->i_sb)->s_fc_lock) > static bool ext4_fc_disabled(struct super_block *sb) > { > return (!test_opt2(sb, JOURNAL_FAST_COMMIT) || > - (EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY)); > + ext4_test_mount_state(sb, EXT4_FC_REPLAY)); > } > > /* > @@ -1975,7 +1975,7 @@ void ext4_fc_replay_cleanup(struct super_block *sb) > { > struct ext4_sb_info *sbi = EXT4_SB(sb); > > - sbi->s_mount_state &= ~EXT4_FC_REPLAY; > + ext4_clear_mount_state(sb, EXT4_FC_REPLAY); > kfree(sbi->s_fc_replay_state.fc_regions); > kfree(sbi->s_fc_replay_state.fc_modified_inodes); > } > @@ -2165,7 +2165,7 @@ static int ext4_fc_replay(journal_t *journal, struct buffer_head *bh, > > if (state->fc_current_pass != pass) { > state->fc_current_pass = pass; > - sbi->s_mount_state |= EXT4_FC_REPLAY; > + ext4_set_mount_state(sb, EXT4_FC_REPLAY); > } > if (!sbi->s_fc_replay_state.fc_replay_num_tags) { > ext4_debug("Replay stops\n"); > diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c > index 754f961cd9fd..09ec20b2e761 100644 > --- a/fs/ext4/ialloc.c > +++ b/fs/ext4/ialloc.c > @@ -84,7 +84,7 @@ static int ext4_validate_inode_bitmap(struct super_block *sb, > ext4_fsblk_t blk; > struct ext4_group_info *grp; > > - if (EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY) > + if (ext4_test_mount_state(sb, EXT4_FC_REPLAY)) > return 0; > > grp = ext4_get_group_info(sb, block_group); > @@ -291,7 +291,7 @@ void ext4_free_inode(handle_t *handle, struct inode *inode) > bitmap_bh = NULL; > goto error_return; > } > - if (!(sbi->s_mount_state & EXT4_FC_REPLAY)) { > + if (!ext4_test_mount_state(sb, EXT4_FC_REPLAY)) { > grp = ext4_get_group_info(sb, block_group); > if (!grp || unlikely(EXT4_MB_GRP_IBITMAP_CORRUPT(grp))) { > fatal = -EFSCORRUPTED; > @@ -1040,7 +1040,7 @@ struct inode *__ext4_new_inode(struct mnt_idmap *idmap, > if (ext4_free_inodes_count(sb, gdp) == 0) > goto next_group; > > - if (!(sbi->s_mount_state & EXT4_FC_REPLAY)) { > + if (!ext4_test_mount_state(sb, EXT4_FC_REPLAY)) { > grp = ext4_get_group_info(sb, group); > /* > * Skip groups with already-known suspicious inode > @@ -1053,7 +1053,7 @@ struct inode *__ext4_new_inode(struct mnt_idmap *idmap, > brelse(inode_bitmap_bh); > inode_bitmap_bh = ext4_read_inode_bitmap(sb, group); > /* Skip groups with suspicious inode tables */ > - if (((!(sbi->s_mount_state & EXT4_FC_REPLAY)) > + if (((ext4_test_mount_state(sb, EXT4_FC_REPLAY)) dangerous, missing "!", V2 patch fix it
Powered by blists - more mailing lists