mirror of
https://github.com/torvalds/linux.git
synced 2026-10-23 23:51:02 +02:00
omfs: check for an inode write error with buffer_write_io_error()
__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@fiu.edu> Signed-off-by: Chao Shi <coshi036@gmail.com> Link: https://patch.msgid.link/b33ccb12c29ae743ccfa48cdf1e9140fbf2dabcc.1785951556.git.coshi036@gmail.com Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
This commit is contained in:
parent
5c49ba63be
commit
5089db0f2d
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user