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;
