Re: [RFC PATCH v4 2/8] jbd2: ensure abort the journal if detect IO error when writing original buffer back
From: "Theodore Ts'o" <tytso@mit.edu>
Date: 2021-06-24 14:36:28
Also in:
linux-ext4
From: "Theodore Ts'o" <tytso@mit.edu>
Date: 2021-06-24 14:36:28
Also in:
linux-ext4
On Thu, Jun 10, 2021 at 07:24:34PM +0800, Zhang Yi wrote:
Although we merged c044f3d8360 ("jbd2: abort journal if free a async
write error metadata buffer"), there is a race between
jbd2_journal_try_to_free_buffers() and jbd2_journal_destroy(), so the
jbd2_log_do_checkpoint() may still fail to detect the buffer write
io error flag which may lead to filesystem inconsistency.
jbd2_journal_try_to_free_buffers() ext4_put_super()
jbd2_journal_destroy()
__jbd2_journal_remove_checkpoint()
detect buffer write error jbd2_log_do_checkpoint()
jbd2_cleanup_journal_tail()
<--- lead to inconsistency
jbd2_journal_abort()
Fix this issue by introducing a new atomic flag which only have one
JBD2_CHECKPOINT_IO_ERROR bit now, and set it in
__jbd2_journal_remove_checkpoint() when freeing a checkpoint buffer
which has write_io_error flag. Then jbd2_journal_destroy() will detect
this mark and abort the journal to prevent updating log tail.
Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>Applied, thanks. - Ted