Re: [PATCH v2 10/21] omfs: check for an inode write error with buffer_write_io_error()
From: Jan Kara
Date: Wed Aug 26 2026 - 03:53:24 EST
On Thu 06-08-26 12:58:33, Chao Shi wrote:
> __omfs_write_inode() spots a failed synchronous write, on both the primary
> block and each mirror, 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 each 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/omfs/inode.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/fs/omfs/inode.c b/fs/omfs/inode.c
> index 1d915ef72119..bc37029a4afb 100644
> --- a/fs/omfs/inode.c
> +++ b/fs/omfs/inode.c
> @@ -145,7 +145,7 @@ static int __omfs_write_inode(struct inode *inode, int wait)
> mark_buffer_dirty(bh);
> if (wait) {
> sync_dirty_buffer(bh);
> - if (buffer_req(bh) && !buffer_uptodate(bh))
> + if (buffer_write_io_error(bh))
> sync_failed = 1;
> }
>
> @@ -159,7 +159,7 @@ static int __omfs_write_inode(struct inode *inode, int wait)
> mark_buffer_dirty(bh2);
> if (wait) {
> sync_dirty_buffer(bh2);
> - if (buffer_req(bh2) && !buffer_uptodate(bh2))
> + if (buffer_write_io_error(bh2))
> sync_failed = 1;
> }
> brelse(bh2);
> --
> 2.43.0
>
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR