aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/ioctl.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 332b624e25db..5ed5bd001084 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -3263,9 +3263,17 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
3263 3263
3264 unlock_extent(&BTRFS_I(src)->io_tree, off, off + len - 1); 3264 unlock_extent(&BTRFS_I(src)->io_tree, off, off + len - 1);
3265out_unlock: 3265out_unlock:
3266 mutex_unlock(&src->i_mutex); 3266 if (!same_inode) {
3267 if (!same_inode) 3267 if (inode < src) {
3268 mutex_unlock(&inode->i_mutex); 3268 mutex_unlock(&src->i_mutex);
3269 mutex_unlock(&inode->i_mutex);
3270 } else {
3271 mutex_unlock(&inode->i_mutex);
3272 mutex_unlock(&src->i_mutex);
3273 }
3274 } else {
3275 mutex_unlock(&src->i_mutex);
3276 }
3269out_fput: 3277out_fput:
3270 fdput(src_file); 3278 fdput(src_file);
3271out_drop_write: 3279out_drop_write: