Commit b4e73e61 authored by Zhihao Cheng's avatar Zhihao Cheng Committed by Theodore Ts'o
Browse files

jbd2: abort journal when detecting metadata writeback error of fs dev



This is a replacement solution of commit bc71726c ("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: default avatarZhihao Cheng <chengzhihao1@huawei.com>
Reviewed-by: default avatarJan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20231213013224.2100050-5-chengzhihao1@huawei.com


Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent 8a4fd33d
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -1231,11 +1231,25 @@ static bool jbd2_write_access_granted(handle_t *handle, struct buffer_head *bh,
int jbd2_journal_get_write_access(handle_t *handle, struct buffer_head *bh)
{
	struct journal_head *jh;
	journal_t *journal;
	int rc;

	if (is_handle_aborted(handle))
		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))
		return 0;