Re: [PATCH v2 08/21] adfs: check for a directory write error with buffer_write_io_error()

From: Jan Kara

Date: Wed Aug 26 2026 - 03:54:43 EST


On Thu 06-08-26 12:58:31, Chao Shi wrote:
> adfs_dir_sync() spots a failed write by testing BH_Req together with
> !BH_Uptodate. That relies on the write completion handler clearing
> BH_Uptodate on error, which this series removes: a buffer whose write
> failed still holds the data the filesystem asked to be written, so
> declaring it not up to date is wrong and makes callers re-read it.
>
> BH_Write_EIO says exactly what this code wants to know, and it implies
> BH_Req, so the pair collapses into one test.
>
> No behaviour change today - a failed write sets BH_Write_EIO and clears
> BH_Uptodate together. It stops being a no-op at the end of the series,
> where the new test is the one that still works.
>
> Acked-by: Weidong Zhu <weizhu@xxxxxxx>
> Signed-off-by: Chao Shi <coshi036@xxxxxxxxx>

Looks good. Feel free to add:

Reviewed-by: Jan Kara <jack@xxxxxxx>

Honza

> ---
> fs/adfs/dir.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/adfs/dir.c b/fs/adfs/dir.c
> index 11afa9e157aa..b8cc6a697a05 100644
> --- a/fs/adfs/dir.c
> +++ b/fs/adfs/dir.c
> @@ -191,7 +191,7 @@ static int adfs_dir_sync(struct adfs_dir *dir)
> for (i = dir->nr_buffers - 1; i >= 0; i--) {
> struct buffer_head *bh = dir->bhs[i];
> sync_dirty_buffer(bh);
> - if (buffer_req(bh) && !buffer_uptodate(bh))
> + if (buffer_write_io_error(bh))
> err = -EIO;
> }
>
> --
> 2.43.0
>
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR