@@ -584,8 +584,12 @@ static int btrfs_defrag_file(struct file *file,
}
total_read++;
mutex_lock(&inode->i_mutex);
- if (range->flags & BTRFS_DEFRAG_RANGE_COMPRESS)
+ if (range->flags & BTRFS_DEFRAG_RANGE_COMPRESS) {
BTRFS_I(inode)->force_compress = BTRFS_COMPRESS_ZLIB;
+ if (range->compress_type)
+ BTRFS_I(inode)->force_compress =
+ range->compress_type;
+ }
ret = btrfs_delalloc_reserve_space(inode, PAGE_CACHE_SIZE);
if (ret)
@@ -122,8 +122,15 @@ struct btrfs_ioctl_defrag_range_args {
*/
__u32 extent_thresh;
+ /*
+ * which compression method to use if turning on compression
+ * for this defrag operation. If unspecified, zlib will
+ * be used
+ */
+ __u32 compress_type;
+
/* spare for later */
- __u32 unused[5];
+ __u32 unused[4];
};
struct btrfs_ioctl_space_info {