jbd2: abort journal when detecting metadata writeback error of fs dev
This is a replacement solution of commit bc71726c72
("ext4: abort
the filesystem if failed to async write metadata buffer"), JBD2 can
detect metadata writeback error of fs dev by 'j_fs_dev_wb_err'.
Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20231213013224.2100050-5-chengzhihao1@huawei.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
8a4fd33d87
commit
b4e73e6126
|
@ -1231,11 +1231,25 @@ out:
|
||||||
int jbd2_journal_get_write_access(handle_t *handle, struct buffer_head *bh)
|
int jbd2_journal_get_write_access(handle_t *handle, struct buffer_head *bh)
|
||||||
{
|
{
|
||||||
struct journal_head *jh;
|
struct journal_head *jh;
|
||||||
|
journal_t *journal;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if (is_handle_aborted(handle))
|
if (is_handle_aborted(handle))
|
||||||
return -EROFS;
|
return -EROFS;
|
||||||
|
|
||||||
|
journal = handle->h_transaction->t_journal;
|
||||||
|
if (jbd2_check_fs_dev_write_error(journal)) {
|
||||||
|
/*
|
||||||
|
* If the fs dev has writeback errors, it may have failed
|
||||||
|
* to async write out metadata buffers in the background.
|
||||||
|
* In this case, we could read old data from disk and write
|
||||||
|
* it out again, which may lead to on-disk filesystem
|
||||||
|
* inconsistency. Aborting journal can avoid it happen.
|
||||||
|
*/
|
||||||
|
jbd2_journal_abort(journal, -EIO);
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
if (jbd2_write_access_granted(handle, bh, false))
|
if (jbd2_write_access_granted(handle, bh, false))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue