]> git.itanic.dy.fi Git - linux-stable/commitdiff
ext4: make 'abort' mount option handling standard
authorJan Kara <jack@suse.cz>
Fri, 16 Jun 2023 16:50:50 +0000 (18:50 +0200)
committerTheodore Ts'o <tytso@mit.edu>
Sat, 29 Jul 2023 22:37:53 +0000 (18:37 -0400)
'abort' mount option is the only mount option that has special handling
and sets a bit in sbi->s_mount_flags. There is not strong reason for
that so just simplify the code and make 'abort' set a bit in
sbi->s_mount_opt2 as any other mount option. This simplifies the code
and will allow us to drop EXT4_MF_FS_ABORTED completely in the following
patch.

Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20230616165109.21695-4-jack@suse.cz
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/ext4.h
fs/ext4/super.c

index feb38c9fe1294c12bbc86a27d6d342bd74414f45..907829007f3fcdee824228a8238891696f03e601 100644 (file)
@@ -1235,6 +1235,7 @@ struct ext4_inode_info {
 #define EXT4_MOUNT2_MB_OPTIMIZE_SCAN   0x00000080 /* Optimize group
                                                    * scanning in mballoc
                                                    */
+#define EXT4_MOUNT2_ABORT              0x00000100 /* Abort filesystem */
 
 #define clear_opt(sb, opt)             EXT4_SB(sb)->s_mount_opt &= \
                                                ~EXT4_MOUNT_##opt
index 0038233eafa812d1b54bb682e81a33bcff84bda6..f84142907cd51ef81252352579678fd900c0ccd8 100644 (file)
@@ -1897,6 +1897,7 @@ static const struct mount_opts {
        {Opt_fc_debug_force, EXT4_MOUNT2_JOURNAL_FAST_COMMIT,
         MOPT_SET | MOPT_2 | MOPT_EXT4_ONLY},
 #endif
+       {Opt_abort, EXT4_MOUNT2_ABORT, MOPT_SET | MOPT_2},
        {Opt_err, 0, 0}
 };
 
@@ -1965,8 +1966,6 @@ struct ext4_fs_context {
        unsigned int    mask_s_mount_opt;
        unsigned int    vals_s_mount_opt2;
        unsigned int    mask_s_mount_opt2;
-       unsigned long   vals_s_mount_flags;
-       unsigned long   mask_s_mount_flags;
        unsigned int    opt_flags;      /* MOPT flags */
        unsigned int    spec;
        u32             s_max_batch_time;
@@ -2117,12 +2116,6 @@ EXT4_SET_CTX(mount_opt2);
 EXT4_CLEAR_CTX(mount_opt2);
 EXT4_TEST_CTX(mount_opt2);
 
-static inline void ctx_set_mount_flag(struct ext4_fs_context *ctx, int bit)
-{
-       set_bit(bit, &ctx->mask_s_mount_flags);
-       set_bit(bit, &ctx->vals_s_mount_flags);
-}
-
 static int ext4_parse_param(struct fs_context *fc, struct fs_parameter *param)
 {
        struct ext4_fs_context *ctx = fc->fs_private;
@@ -2186,9 +2179,6 @@ static int ext4_parse_param(struct fs_context *fc, struct fs_parameter *param)
                ext4_msg(NULL, KERN_WARNING, "Ignoring removed %s option",
                         param->key);
                return 0;
-       case Opt_abort:
-               ctx_set_mount_flag(ctx, EXT4_MF_FS_ABORTED);
-               return 0;
        case Opt_inlinecrypt:
 #ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
                ctx_set_flags(ctx, SB_INLINECRYPT);
@@ -2842,8 +2832,6 @@ static void ext4_apply_options(struct fs_context *fc, struct super_block *sb)
        sbi->s_mount_opt |= ctx->vals_s_mount_opt;
        sbi->s_mount_opt2 &= ~ctx->mask_s_mount_opt2;
        sbi->s_mount_opt2 |= ctx->vals_s_mount_opt2;
-       sbi->s_mount_flags &= ~ctx->mask_s_mount_flags;
-       sbi->s_mount_flags |= ctx->vals_s_mount_flags;
        sb->s_flags &= ~ctx->mask_s_flags;
        sb->s_flags |= ctx->vals_s_flags;
 
@@ -6497,7 +6485,7 @@ static int __ext4_remount(struct fs_context *fc, struct super_block *sb)
                goto restore_opts;
        }
 
-       if (ext4_test_mount_flag(sb, EXT4_MF_FS_ABORTED))
+       if (test_opt2(sb, ABORT))
                ext4_abort(sb, ESHUTDOWN, "Abort forced by user");
 
        sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |