On Mon, 23 May 2022 at 03:35, ChenXiaoSong <chenxiaosong2@xxxxxxxxxx> wrote: > > As filemap_check_errors() only report -EIO or -ENOSPC, we return more nuanced > writeback error -(file->f_mapping->wb_err & MAX_ERRNO). > > filemap_write_and_wait > filemap_write_and_wait_range > filemap_check_errors > -ENOSPC or -EIO > filemap_check_wb_err > errseq_check > return -(file->f_mapping->wb_err & MAX_ERRNO) > > Signed-off-by: ChenXiaoSong <chenxiaosong2@xxxxxxxxxx> > --- > fs/fuse/file.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/fuse/file.c b/fs/fuse/file.c > index f18d14d5fea1..9917bc2795e6 100644 > --- a/fs/fuse/file.c > +++ b/fs/fuse/file.c > @@ -488,10 +488,10 @@ static int fuse_flush(struct file *file, fl_owner_t id) > inode_unlock(inode); > > err = filemap_check_errors(file->f_mapping); > + /* return more nuanced writeback errors */ > if (err) > - return err; > + return filemap_check_wb_err(file->f_mapping, 0); I'm wondering if this should be file_check_and_advance_wb_err() instead. Is there a difference between ->flush() and ->fsync()? Jeff, can you please help? Thanks, Miklos