diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 4129de5..f2071e82 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -1960,6 +1960,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync) return ret; inode_lock(inode); + inode_dio_wait(inode); atomic_inc(&root->log_batch); full_sync = test_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &BTRFS_I(inode)->runtime_flags); diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 7f3a080..c1c04b7 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -4149,7 +4149,7 @@ static int btrfs_log_changed_extents(struct btrfs_trans_handle *trans, INIT_LIST_HEAD(&extents); - down_write(&BTRFS_I(inode)->dio_sem); + /* down_write(&BTRFS_I(inode)->dio_sem); */ write_lock(&tree->lock); test_gen = root->fs_info->last_trans_committed; @@ -4218,7 +4218,7 @@ process: } WARN_ON(!list_empty(&extents)); write_unlock(&tree->lock); - up_write(&BTRFS_I(inode)->dio_sem); + /* up_write(&BTRFS_I(inode)->dio_sem); */ btrfs_release_path(path); return ret;