diff options
author | Theodore Ts'o <tytso@mit.edu> | 2017-02-05 07:28:48 +0100 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2017-02-05 07:28:48 +0100 |
commit | 0db1ff222d40f1601c961f0edb86d10426992595 (patch) | |
tree | 74c6613fb9f3fba41ff3fc90e0db69d9df20490c /fs/ext4/ext4_jbd2.c | |
parent | ext4: rename s_resize_flags to s_ext4_flags (diff) | |
download | linux-0db1ff222d40f1601c961f0edb86d10426992595.tar.xz linux-0db1ff222d40f1601c961f0edb86d10426992595.zip |
ext4: add shutdown bit and check for it
Add a shutdown bit that will cause ext4 processing to fail immediately
with EIO.
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/ext4_jbd2.c')
-rw-r--r-- | fs/ext4/ext4_jbd2.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/fs/ext4/ext4_jbd2.c b/fs/ext4/ext4_jbd2.c index e770c1ee4613..dd106b1d5d89 100644 --- a/fs/ext4/ext4_jbd2.c +++ b/fs/ext4/ext4_jbd2.c @@ -43,6 +43,10 @@ static int ext4_journal_check_start(struct super_block *sb) journal_t *journal; might_sleep(); + + if (unlikely(ext4_forced_shutdown(EXT4_SB(sb)))) + return -EIO; + if (sb->s_flags & MS_RDONLY) return -EROFS; WARN_ON(sb->s_writers.frozen == SB_FREEZE_COMPLETE); @@ -161,6 +165,13 @@ int __ext4_journal_get_write_access(const char *where, unsigned int line, might_sleep(); if (ext4_handle_valid(handle)) { + struct super_block *sb; + + sb = handle->h_transaction->t_journal->j_private; + if (unlikely(ext4_forced_shutdown(EXT4_SB(sb)))) { + jbd2_journal_abort_handle(handle); + return -EIO; + } err = jbd2_journal_get_write_access(handle, bh); if (err) ext4_journal_abort_handle(where, line, __func__, bh, |