]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fat: Propagate inode buffer write errors from fat_sync_inode_metadata()
authorChristian Brauner <brauner@kernel.org>
Mon, 27 Jul 2026 15:15:57 +0000 (17:15 +0200)
committerChristian Brauner <brauner@kernel.org>
Mon, 27 Jul 2026 15:15:57 +0000 (17:15 +0200)
fat_sync_inode_metadata() ignores the result of writing the buffer
containing the inode's directory entry. Before commit 525da4f40a7c
("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: 525da4f40a7c ("fat: Fix missed inode writeback during fsync(2)")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
fs/fat/inode.c

index e3bb7b4713f2ac40f720f023213b52eecc8c9428..ef1f826179cd55e7661d6dba1c8f5979f22daf9a 100644 (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);
 }