diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2018-06-03 21:00:00 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2018-06-03 21:01:03 -0400 |
commit | 4679aa72da5fef47785350b2706c8f76ea8c22ec (patch) | |
tree | 13b64d2ed10e41fc4ec483176f5d8958b5eca65d | |
parent | 61d7118155621a9b40a1a105f24bee5e760554e3 (diff) |
bcachefs: fix a minor fsync bug
-rw-r--r-- | fs/bcachefs/fs-io.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/bcachefs/fs-io.c b/fs/bcachefs/fs-io.c index 40af7ea47279..737b9be33e0a 100644 --- a/fs/bcachefs/fs-io.c +++ b/fs/bcachefs/fs-io.c @@ -2059,10 +2059,17 @@ int bch2_fsync(struct file *file, loff_t start, loff_t end, int datasync) struct bch_fs *c = inode->v.i_sb->s_fs_info; int ret; - ret = filemap_write_and_wait_range(inode->v.i_mapping, start, end); + ret = file_write_and_wait_range(file, start, end); if (ret) return ret; + if (datasync && !(inode->v.i_state & I_DIRTY_DATASYNC)) + goto out; + + ret = sync_inode_metadata(&inode->v, 1); + if (ret) + return ret; +out: if (c->opts.journal_flush_disabled) return 0; |