ext4: combine ext4_handle_error() and save_error_info()
save_error_info() is always called together with ext4_handle_error(). Combine them into a single call and move unconditional bits out of save_error_info() into ext4_handle_error(). Signed-off-by: Jan Kara <jack@suse.cz> Link: https://lore.kernel.org/r/20201216101844.22917-2-jack@suse.cz Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
be993933d2
commit
e789ca0cc1
@ -592,9 +592,6 @@ static void __save_error_info(struct super_block *sb, int error,
|
|||||||
{
|
{
|
||||||
struct ext4_sb_info *sbi = EXT4_SB(sb);
|
struct ext4_sb_info *sbi = EXT4_SB(sb);
|
||||||
|
|
||||||
EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
|
|
||||||
if (bdev_read_only(sb->s_bdev))
|
|
||||||
return;
|
|
||||||
/* We default to EFSCORRUPTED error... */
|
/* We default to EFSCORRUPTED error... */
|
||||||
if (error == 0)
|
if (error == 0)
|
||||||
error = EFSCORRUPTED;
|
error = EFSCORRUPTED;
|
||||||
@ -647,13 +644,19 @@ static void save_error_info(struct super_block *sb, int error,
|
|||||||
* used to deal with unrecoverable failures such as journal IO errors or ENOMEM
|
* used to deal with unrecoverable failures such as journal IO errors or ENOMEM
|
||||||
* at a critical moment in log management.
|
* at a critical moment in log management.
|
||||||
*/
|
*/
|
||||||
static void ext4_handle_error(struct super_block *sb, bool force_ro)
|
static void ext4_handle_error(struct super_block *sb, bool force_ro, int error,
|
||||||
|
__u32 ino, __u64 block,
|
||||||
|
const char *func, unsigned int line)
|
||||||
{
|
{
|
||||||
journal_t *journal = EXT4_SB(sb)->s_journal;
|
journal_t *journal = EXT4_SB(sb)->s_journal;
|
||||||
|
|
||||||
|
EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
|
||||||
if (test_opt(sb, WARN_ON_ERROR))
|
if (test_opt(sb, WARN_ON_ERROR))
|
||||||
WARN_ON_ONCE(1);
|
WARN_ON_ONCE(1);
|
||||||
|
|
||||||
|
if (!bdev_read_only(sb->s_bdev))
|
||||||
|
save_error_info(sb, error, ino, block, func, line);
|
||||||
|
|
||||||
if (sb_rdonly(sb) || (!force_ro && test_opt(sb, ERRORS_CONT)))
|
if (sb_rdonly(sb) || (!force_ro && test_opt(sb, ERRORS_CONT)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -710,8 +713,7 @@ void __ext4_error(struct super_block *sb, const char *function,
|
|||||||
sb->s_id, function, line, current->comm, &vaf);
|
sb->s_id, function, line, current->comm, &vaf);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
save_error_info(sb, error, 0, block, function, line);
|
ext4_handle_error(sb, force_ro, error, 0, block, function, line);
|
||||||
ext4_handle_error(sb, force_ro);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void __ext4_error_inode(struct inode *inode, const char *function,
|
void __ext4_error_inode(struct inode *inode, const char *function,
|
||||||
@ -741,9 +743,8 @@ void __ext4_error_inode(struct inode *inode, const char *function,
|
|||||||
current->comm, &vaf);
|
current->comm, &vaf);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
save_error_info(inode->i_sb, error, inode->i_ino, block,
|
ext4_handle_error(inode->i_sb, false, error, inode->i_ino, block,
|
||||||
function, line);
|
function, line);
|
||||||
ext4_handle_error(inode->i_sb, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void __ext4_error_file(struct file *file, const char *function,
|
void __ext4_error_file(struct file *file, const char *function,
|
||||||
@ -780,9 +781,8 @@ void __ext4_error_file(struct file *file, const char *function,
|
|||||||
current->comm, path, &vaf);
|
current->comm, path, &vaf);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
save_error_info(inode->i_sb, EFSCORRUPTED, inode->i_ino, block,
|
ext4_handle_error(inode->i_sb, false, EFSCORRUPTED, inode->i_ino, block,
|
||||||
function, line);
|
function, line);
|
||||||
ext4_handle_error(inode->i_sb, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *ext4_decode_error(struct super_block *sb, int errno,
|
const char *ext4_decode_error(struct super_block *sb, int errno,
|
||||||
@ -849,8 +849,7 @@ void __ext4_std_error(struct super_block *sb, const char *function,
|
|||||||
sb->s_id, function, line, errstr);
|
sb->s_id, function, line, errstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
save_error_info(sb, -errno, 0, 0, function, line);
|
ext4_handle_error(sb, false, -errno, 0, 0, function, line);
|
||||||
ext4_handle_error(sb, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void __ext4_msg(struct super_block *sb,
|
void __ext4_msg(struct super_block *sb,
|
||||||
@ -944,13 +943,14 @@ __acquires(bitlock)
|
|||||||
if (test_opt(sb, ERRORS_CONT)) {
|
if (test_opt(sb, ERRORS_CONT)) {
|
||||||
if (test_opt(sb, WARN_ON_ERROR))
|
if (test_opt(sb, WARN_ON_ERROR))
|
||||||
WARN_ON_ONCE(1);
|
WARN_ON_ONCE(1);
|
||||||
|
EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
|
||||||
__save_error_info(sb, EFSCORRUPTED, ino, block, function, line);
|
__save_error_info(sb, EFSCORRUPTED, ino, block, function, line);
|
||||||
schedule_work(&EXT4_SB(sb)->s_error_work);
|
if (!bdev_read_only(sb->s_bdev))
|
||||||
|
schedule_work(&EXT4_SB(sb)->s_error_work);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ext4_unlock_group(sb, grp);
|
ext4_unlock_group(sb, grp);
|
||||||
save_error_info(sb, EFSCORRUPTED, ino, block, function, line);
|
ext4_handle_error(sb, false, EFSCORRUPTED, ino, block, function, line);
|
||||||
ext4_handle_error(sb, false);
|
|
||||||
/*
|
/*
|
||||||
* We only get here in the ERRORS_RO case; relocking the group
|
* We only get here in the ERRORS_RO case; relocking the group
|
||||||
* may be dangerous, but nothing bad will happen since the
|
* may be dangerous, but nothing bad will happen since the
|
||||||
|
Loading…
Reference in New Issue
Block a user