--- Revision None +++ Revision 346266326530 @@ -0,0 +1,34 @@ +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;