diff options
-rw-r--r-- | fs/btrfs/ioctl.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index a979ab7d396..45910d4b8f6 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c | |||
@@ -1137,12 +1137,16 @@ int btrfs_defrag_file(struct inode *inode, struct file *file, | |||
1137 | ra_index += max_cluster; | 1137 | ra_index += max_cluster; |
1138 | } | 1138 | } |
1139 | 1139 | ||
1140 | mutex_lock(&inode->i_mutex); | ||
1140 | ret = cluster_pages_for_defrag(inode, pages, i, cluster); | 1141 | ret = cluster_pages_for_defrag(inode, pages, i, cluster); |
1141 | if (ret < 0) | 1142 | if (ret < 0) { |
1143 | mutex_unlock(&inode->i_mutex); | ||
1142 | goto out_ra; | 1144 | goto out_ra; |
1145 | } | ||
1143 | 1146 | ||
1144 | defrag_count += ret; | 1147 | defrag_count += ret; |
1145 | balance_dirty_pages_ratelimited_nr(inode->i_mapping, ret); | 1148 | balance_dirty_pages_ratelimited_nr(inode->i_mapping, ret); |
1149 | mutex_unlock(&inode->i_mutex); | ||
1146 | 1150 | ||
1147 | if (newer_than) { | 1151 | if (newer_than) { |
1148 | if (newer_off == (u64)-1) | 1152 | if (newer_off == (u64)-1) |