aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/ioctl.c6
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)