Re: [PATCH 04/19] buffer: clear BH_Write_EIO when a buffer is forgotten
From: Jan Kara
Date: Tue Aug 04 2026 - 04:36:12 EST
On Sat 01-08-26 18:00:48, Chao Shi wrote:
> BH_Write_EIO records that the last write of this buffer failed. It is
> cleared when the buffer is submitted for write again - see the
> test_set_buffer_req() check in __bh_submit() - but a filesystem freeing a
> metadata block never submits it again. It calls bforget() and hands the
> block back to the allocator, so the flag outlives the block it refers to.
>
> That does not matter much today, because the write error is also recorded
> by clearing BH_Uptodate and the buffer is discarded soon after. It starts
> to matter in the rest of this series, which stops clearing BH_Uptodate on
> write error and makes BH_Write_EIO the way a failed metadata write is
> reported.
>
> bforget() is where a filesystem says it no longer cares about this
> buffer's contents, so clear the error there alongside the dirty flag.
>
> Suggested-by: Jan Kara <jack@xxxxxxx>
> Signed-off-by: Chao Shi <coshi036@xxxxxxxxx>
Looks good. Feel free to add:
Reviewed-by: Jan Kara <jack@xxxxxxx>
Honza
> ---
> fs/buffer.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/fs/buffer.c b/fs/buffer.c
> index 04fcc34e4fa6..7889c30d8715 100644
> --- a/fs/buffer.c
> +++ b/fs/buffer.c
> @@ -1091,6 +1091,7 @@ EXPORT_SYMBOL(__brelse);
> void __bforget(struct buffer_head *bh)
> {
> clear_buffer_dirty(bh);
> + clear_buffer_write_io_error(bh);
> remove_assoc_queue(bh);
> __brelse(bh);
> }
> --
> 2.43.0
>
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR