|
@@ -1285,9 +1285,6 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,
|
|
|
cluster = max_cluster;
|
|
|
}
|
|
|
|
|
|
- if (range->flags & BTRFS_DEFRAG_RANGE_COMPRESS)
|
|
|
- BTRFS_I(inode)->force_compress = compress_type;
|
|
|
-
|
|
|
if (i + cluster > ra_index) {
|
|
|
ra_index = max(i, ra_index);
|
|
|
btrfs_force_ra(inode->i_mapping, ra, file, ra_index,
|
|
@@ -1296,6 +1293,8 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,
|
|
|
}
|
|
|
|
|
|
mutex_lock(&inode->i_mutex);
|
|
|
+ if (range->flags & BTRFS_DEFRAG_RANGE_COMPRESS)
|
|
|
+ BTRFS_I(inode)->force_compress = compress_type;
|
|
|
ret = cluster_pages_for_defrag(inode, pages, i, cluster);
|
|
|
if (ret < 0) {
|
|
|
mutex_unlock(&inode->i_mutex);
|
|
@@ -1352,10 +1351,6 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,
|
|
|
atomic_read(&root->fs_info->async_delalloc_pages) == 0));
|
|
|
}
|
|
|
atomic_dec(&root->fs_info->async_submit_draining);
|
|
|
-
|
|
|
- mutex_lock(&inode->i_mutex);
|
|
|
- BTRFS_I(inode)->force_compress = BTRFS_COMPRESS_NONE;
|
|
|
- mutex_unlock(&inode->i_mutex);
|
|
|
}
|
|
|
|
|
|
if (range->compress_type == BTRFS_COMPRESS_LZO) {
|
|
@@ -1365,6 +1360,11 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,
|
|
|
ret = defrag_count;
|
|
|
|
|
|
out_ra:
|
|
|
+ if (range->flags & BTRFS_DEFRAG_RANGE_COMPRESS) {
|
|
|
+ mutex_lock(&inode->i_mutex);
|
|
|
+ BTRFS_I(inode)->force_compress = BTRFS_COMPRESS_NONE;
|
|
|
+ mutex_unlock(&inode->i_mutex);
|
|
|
+ }
|
|
|
if (!file)
|
|
|
kfree(ra);
|
|
|
kfree(pages);
|