fuse: fuse_flush must check mapping->flags for errors
Subsystems (2)
PATCH 1/1 fuse: fuse_flush must check mapping->flags for errors
fuse_flush() calls write_inode_now() that triggers writeback, but actual writeback will happen later, on fuse_sync_writes(). If an error happens, fuse_writepage_end() will set error bit in mapping->flags. So, we have to check mapping->flags after fuse_sync_writes().
Signed-off-by Maxim Patlasov <[email protected]>
--- fs/fuse/file.c | 9 +++++++++ 1 file changed, 9 insertions(+)
fs/fuse/file.c +9 -0
@@ -413,6 +413,15 @@ static int fuse_flush(struct file *file, fl_owner_t id)if (err)return err; +if (test_bit (AS_ENOSPC , &file->f_mapping->flags) && +test_and_clear_bit (AS_ENOSPC , &file->f_mapping->flags)) + err = -ENOSPC ; +if (test_bit (AS_EIO , &file->f_mapping->flags) && +test_and_clear_bit (AS_EIO , &file->f_mapping->flags)) + err = -EIO ; +if (err) +return err; +inode_lock (inode);fuse_sync_writes (inode);inode_unlock (inode);