fat: Propagate inode buffer write errors from fat_sync_inode_metadata()

fat_sync_inode_metadata() ignores the result of writing the buffer
containing the inode's directory entry. Before commit 525da4f40a
("fat: Fix missed inode writeback during fsync(2)") a write error was
propagated to fsync(2) via __fat_write_inode() -> sync_dirty_buffer(),
now fsync(2) reports success even though the inode's directory entry
could not be written. Check buffer_write_io_error() after
sync_dirty_buffer() like the other ->sync_inode_metadata
implementations do.

Fixes: 525da4f40a ("fat: Fix missed inode writeback during fsync(2)")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
This commit is contained in:
Christian Brauner 2026-07-27 17:15:57 +02:00
parent d7de16e240
commit a50587bbf3

View File

@ -646,8 +646,13 @@ static int fat_sync_inode_metadata(struct inode *inode,
* Buffer present? We leave buffer_dirty check for sync_dirty_buffer()
* for proper synchronization with ongoing IO.
*/
if (bh && buffer_uptodate(bh))
if (bh && buffer_uptodate(bh)) {
sync_dirty_buffer(bh);
if (buffer_write_io_error(bh)) {
brelse(bh);
return -EIO;
}
}
brelse(bh);
return mmb_sync(&MSDOS_I(inode)->i_metadata_bhs);
}