bcachefs: Fix fsync error reporting
authorKent Overstreet <kent.overstreet@gmail.com>
Thu, 18 Apr 2019 00:34:24 +0000 (20:34 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:21 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/fs-io.c

index f76dd4d89f25c6dfe22eaaa151a0a1ebb99640b9..619daf65e1ec370ef1238e7651149cf94ce8b569 100644 (file)
@@ -1131,9 +1131,10 @@ static void bch2_writepage_io_done(struct closure *cl)
        struct bio_vec *bvec;
 
        if (io->op.op.error) {
-               bio_for_each_segment_all(bvec, bio, iter)
+               bio_for_each_segment_all(bvec, bio, iter) {
                        SetPageError(bvec->bv_page);
-               set_bit(AS_EIO, &io->op.inode->v.i_mapping->flags);
+                       mapping_set_error(bvec->bv_page->mapping, -EIO);
+               }
        }
 
        /*
@@ -2068,10 +2069,9 @@ int bch2_fsync(struct file *file, loff_t start, loff_t end, int datasync)
        if (ret)
                return ret;
 out:
-       if (c->opts.journal_flush_disabled)
-               return 0;
-
-       ret = bch2_journal_flush_seq(&c->journal, inode->ei_journal_seq);
+       if (!c->opts.journal_flush_disabled)
+               ret = bch2_journal_flush_seq(&c->journal,
+                                            inode->ei_journal_seq);
        ret2 = file_check_and_advance_wb_err(file);
 
        return ret ?: ret2;