ext4: move the abort flag from s_mount_opts to s_mount_flags
We're running out of space in the mount options word, and EXT4_MOUNT_ABORT isn't really a mount option, but a run-time flag. So move it to become EXT4_MF_FS_ABORTED in s_mount_flags. Also remove bogus ext2_fs.h / ext4.h simultaneous #include protection, which can never happen. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
parent
bc0b0d6d69
commit
4ab2f15b7f
3 changed files with 9 additions and 16 deletions
|
@ -684,7 +684,6 @@ struct ext4_inode_info {
|
||||||
#define EXT4_MOUNT_ERRORS_PANIC 0x00040 /* Panic on errors */
|
#define EXT4_MOUNT_ERRORS_PANIC 0x00040 /* Panic on errors */
|
||||||
#define EXT4_MOUNT_MINIX_DF 0x00080 /* Mimics the Minix statfs */
|
#define EXT4_MOUNT_MINIX_DF 0x00080 /* Mimics the Minix statfs */
|
||||||
#define EXT4_MOUNT_NOLOAD 0x00100 /* Don't use existing journal*/
|
#define EXT4_MOUNT_NOLOAD 0x00100 /* Don't use existing journal*/
|
||||||
#define EXT4_MOUNT_ABORT 0x00200 /* Fatal error detected */
|
|
||||||
#define EXT4_MOUNT_DATA_FLAGS 0x00C00 /* Mode for data writes: */
|
#define EXT4_MOUNT_DATA_FLAGS 0x00C00 /* Mode for data writes: */
|
||||||
#define EXT4_MOUNT_JOURNAL_DATA 0x00400 /* Write data to journal */
|
#define EXT4_MOUNT_JOURNAL_DATA 0x00400 /* Write data to journal */
|
||||||
#define EXT4_MOUNT_ORDERED_DATA 0x00800 /* Flush data before commit */
|
#define EXT4_MOUNT_ORDERED_DATA 0x00800 /* Flush data before commit */
|
||||||
|
@ -706,17 +705,10 @@ struct ext4_inode_info {
|
||||||
#define EXT4_MOUNT_DATA_ERR_ABORT 0x10000000 /* Abort on file data write */
|
#define EXT4_MOUNT_DATA_ERR_ABORT 0x10000000 /* Abort on file data write */
|
||||||
#define EXT4_MOUNT_BLOCK_VALIDITY 0x20000000 /* Block validity checking */
|
#define EXT4_MOUNT_BLOCK_VALIDITY 0x20000000 /* Block validity checking */
|
||||||
|
|
||||||
/* Compatibility, for having both ext2_fs.h and ext4_fs.h included at once */
|
|
||||||
#ifndef _LINUX_EXT2_FS_H
|
|
||||||
#define clear_opt(o, opt) o &= ~EXT4_MOUNT_##opt
|
#define clear_opt(o, opt) o &= ~EXT4_MOUNT_##opt
|
||||||
#define set_opt(o, opt) o |= EXT4_MOUNT_##opt
|
#define set_opt(o, opt) o |= EXT4_MOUNT_##opt
|
||||||
#define test_opt(sb, opt) (EXT4_SB(sb)->s_mount_opt & \
|
#define test_opt(sb, opt) (EXT4_SB(sb)->s_mount_opt & \
|
||||||
EXT4_MOUNT_##opt)
|
EXT4_MOUNT_##opt)
|
||||||
#else
|
|
||||||
#define EXT2_MOUNT_NOLOAD EXT4_MOUNT_NOLOAD
|
|
||||||
#define EXT2_MOUNT_ABORT EXT4_MOUNT_ABORT
|
|
||||||
#define EXT2_MOUNT_DATA_FLAGS EXT4_MOUNT_DATA_FLAGS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ext4_set_bit ext2_set_bit
|
#define ext4_set_bit ext2_set_bit
|
||||||
#define ext4_set_bit_atomic ext2_set_bit_atomic
|
#define ext4_set_bit_atomic ext2_set_bit_atomic
|
||||||
|
@ -836,9 +828,10 @@ struct ext4_super_block {
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mount flags
|
* run-time mount flags
|
||||||
*/
|
*/
|
||||||
#define EXT4_MF_MNTDIR_SAMPLED 0x0001
|
#define EXT4_MF_MNTDIR_SAMPLED 0x0001
|
||||||
|
#define EXT4_MF_FS_ABORTED 0x0002 /* Fatal error detected */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fourth extended-fs super-block data in memory
|
* fourth extended-fs super-block data in memory
|
||||||
|
|
|
@ -2670,13 +2670,13 @@ static int ext4_da_writepages(struct address_space *mapping,
|
||||||
* If the filesystem has aborted, it is read-only, so return
|
* If the filesystem has aborted, it is read-only, so return
|
||||||
* right away instead of dumping stack traces later on that
|
* right away instead of dumping stack traces later on that
|
||||||
* will obscure the real source of the problem. We test
|
* will obscure the real source of the problem. We test
|
||||||
* EXT4_MOUNT_ABORT instead of sb->s_flag's MS_RDONLY because
|
* EXT4_MF_FS_ABORTED instead of sb->s_flag's MS_RDONLY because
|
||||||
* the latter could be true if the filesystem is mounted
|
* the latter could be true if the filesystem is mounted
|
||||||
* read-only, and in that case, ext4_da_writepages should
|
* read-only, and in that case, ext4_da_writepages should
|
||||||
* *never* be called, so if that ever happens, we would want
|
* *never* be called, so if that ever happens, we would want
|
||||||
* the stack trace.
|
* the stack trace.
|
||||||
*/
|
*/
|
||||||
if (unlikely(sbi->s_mount_opt & EXT4_MOUNT_ABORT))
|
if (unlikely(sbi->s_mount_flags & EXT4_MF_FS_ABORTED))
|
||||||
return -EROFS;
|
return -EROFS;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -303,7 +303,7 @@ static void ext4_handle_error(struct super_block *sb)
|
||||||
if (!test_opt(sb, ERRORS_CONT)) {
|
if (!test_opt(sb, ERRORS_CONT)) {
|
||||||
journal_t *journal = EXT4_SB(sb)->s_journal;
|
journal_t *journal = EXT4_SB(sb)->s_journal;
|
||||||
|
|
||||||
EXT4_SB(sb)->s_mount_opt |= EXT4_MOUNT_ABORT;
|
EXT4_SB(sb)->s_mount_flags |= EXT4_MF_FS_ABORTED;
|
||||||
if (journal)
|
if (journal)
|
||||||
jbd2_journal_abort(journal, -EIO);
|
jbd2_journal_abort(journal, -EIO);
|
||||||
}
|
}
|
||||||
|
@ -416,7 +416,7 @@ void ext4_abort(struct super_block *sb, const char *function,
|
||||||
ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only");
|
ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only");
|
||||||
EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
|
EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
|
||||||
sb->s_flags |= MS_RDONLY;
|
sb->s_flags |= MS_RDONLY;
|
||||||
EXT4_SB(sb)->s_mount_opt |= EXT4_MOUNT_ABORT;
|
EXT4_SB(sb)->s_mount_flags |= EXT4_MF_FS_ABORTED;
|
||||||
if (EXT4_SB(sb)->s_journal)
|
if (EXT4_SB(sb)->s_journal)
|
||||||
jbd2_journal_abort(EXT4_SB(sb)->s_journal, -EIO);
|
jbd2_journal_abort(EXT4_SB(sb)->s_journal, -EIO);
|
||||||
}
|
}
|
||||||
|
@ -1476,7 +1476,7 @@ static int parse_options(char *options, struct super_block *sb,
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case Opt_abort:
|
case Opt_abort:
|
||||||
set_opt(sbi->s_mount_opt, ABORT);
|
sbi->s_mount_flags |= EXT4_MF_FS_ABORTED;
|
||||||
break;
|
break;
|
||||||
case Opt_nobarrier:
|
case Opt_nobarrier:
|
||||||
clear_opt(sbi->s_mount_opt, BARRIER);
|
clear_opt(sbi->s_mount_opt, BARRIER);
|
||||||
|
@ -3452,7 +3452,7 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
|
||||||
goto restore_opts;
|
goto restore_opts;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sbi->s_mount_opt & EXT4_MOUNT_ABORT)
|
if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED)
|
||||||
ext4_abort(sb, __func__, "Abort forced by user");
|
ext4_abort(sb, __func__, "Abort forced by user");
|
||||||
|
|
||||||
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
|
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
|
||||||
|
@ -3467,7 +3467,7 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
|
||||||
|
|
||||||
if ((*flags & MS_RDONLY) != (sb->s_flags & MS_RDONLY) ||
|
if ((*flags & MS_RDONLY) != (sb->s_flags & MS_RDONLY) ||
|
||||||
n_blocks_count > ext4_blocks_count(es)) {
|
n_blocks_count > ext4_blocks_count(es)) {
|
||||||
if (sbi->s_mount_opt & EXT4_MOUNT_ABORT) {
|
if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED) {
|
||||||
err = -EROFS;
|
err = -EROFS;
|
||||||
goto restore_opts;
|
goto restore_opts;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue