Btrfs: Add mount -o compress-force
The default btrfs mount -o compress mode will quickly back off compressing a file if it notices that compression does not reduce the size of the data being written. This can save considerable CPU because all future writes to the file go through uncompressed. But some files are both very large and have mixed data stored in them. In that case, we want to add the ability to always try compressing data before writing it. This commit adds mount -o compress-force. A later commit will add a new inode flag that does the same thing. Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
parent
11dfe35a01
commit
a555f810af
|
@ -1161,6 +1161,7 @@ struct btrfs_root {
|
||||||
#define BTRFS_MOUNT_SSD_SPREAD (1 << 8)
|
#define BTRFS_MOUNT_SSD_SPREAD (1 << 8)
|
||||||
#define BTRFS_MOUNT_NOSSD (1 << 9)
|
#define BTRFS_MOUNT_NOSSD (1 << 9)
|
||||||
#define BTRFS_MOUNT_DISCARD (1 << 10)
|
#define BTRFS_MOUNT_DISCARD (1 << 10)
|
||||||
|
#define BTRFS_MOUNT_FORCE_COMPRESS (1 << 11)
|
||||||
|
|
||||||
#define btrfs_clear_opt(o, opt) ((o) &= ~BTRFS_MOUNT_##opt)
|
#define btrfs_clear_opt(o, opt) ((o) &= ~BTRFS_MOUNT_##opt)
|
||||||
#define btrfs_set_opt(o, opt) ((o) |= BTRFS_MOUNT_##opt)
|
#define btrfs_set_opt(o, opt) ((o) |= BTRFS_MOUNT_##opt)
|
||||||
|
|
|
@ -483,7 +483,8 @@ again:
|
||||||
nr_pages_ret = 0;
|
nr_pages_ret = 0;
|
||||||
|
|
||||||
/* flag the file so we don't compress in the future */
|
/* flag the file so we don't compress in the future */
|
||||||
BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS;
|
if (!btrfs_test_opt(root, FORCE_COMPRESS))
|
||||||
|
BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS;
|
||||||
}
|
}
|
||||||
if (will_compress) {
|
if (will_compress) {
|
||||||
*num_added += 1;
|
*num_added += 1;
|
||||||
|
|
|
@ -66,7 +66,8 @@ enum {
|
||||||
Opt_degraded, Opt_subvol, Opt_device, Opt_nodatasum, Opt_nodatacow,
|
Opt_degraded, Opt_subvol, Opt_device, Opt_nodatasum, Opt_nodatacow,
|
||||||
Opt_max_extent, Opt_max_inline, Opt_alloc_start, Opt_nobarrier,
|
Opt_max_extent, Opt_max_inline, Opt_alloc_start, Opt_nobarrier,
|
||||||
Opt_ssd, Opt_nossd, Opt_ssd_spread, Opt_thread_pool, Opt_noacl,
|
Opt_ssd, Opt_nossd, Opt_ssd_spread, Opt_thread_pool, Opt_noacl,
|
||||||
Opt_compress, Opt_notreelog, Opt_ratio, Opt_flushoncommit,
|
Opt_compress, Opt_compress_force, Opt_notreelog, Opt_ratio,
|
||||||
|
Opt_flushoncommit,
|
||||||
Opt_discard, Opt_err,
|
Opt_discard, Opt_err,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -82,6 +83,7 @@ static match_table_t tokens = {
|
||||||
{Opt_alloc_start, "alloc_start=%s"},
|
{Opt_alloc_start, "alloc_start=%s"},
|
||||||
{Opt_thread_pool, "thread_pool=%d"},
|
{Opt_thread_pool, "thread_pool=%d"},
|
||||||
{Opt_compress, "compress"},
|
{Opt_compress, "compress"},
|
||||||
|
{Opt_compress_force, "compress-force"},
|
||||||
{Opt_ssd, "ssd"},
|
{Opt_ssd, "ssd"},
|
||||||
{Opt_ssd_spread, "ssd_spread"},
|
{Opt_ssd_spread, "ssd_spread"},
|
||||||
{Opt_nossd, "nossd"},
|
{Opt_nossd, "nossd"},
|
||||||
|
@ -173,6 +175,11 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)
|
||||||
printk(KERN_INFO "btrfs: use compression\n");
|
printk(KERN_INFO "btrfs: use compression\n");
|
||||||
btrfs_set_opt(info->mount_opt, COMPRESS);
|
btrfs_set_opt(info->mount_opt, COMPRESS);
|
||||||
break;
|
break;
|
||||||
|
case Opt_compress_force:
|
||||||
|
printk(KERN_INFO "btrfs: forcing compression\n");
|
||||||
|
btrfs_set_opt(info->mount_opt, FORCE_COMPRESS);
|
||||||
|
btrfs_set_opt(info->mount_opt, COMPRESS);
|
||||||
|
break;
|
||||||
case Opt_ssd:
|
case Opt_ssd:
|
||||||
printk(KERN_INFO "btrfs: use ssd allocation scheme\n");
|
printk(KERN_INFO "btrfs: use ssd allocation scheme\n");
|
||||||
btrfs_set_opt(info->mount_opt, SSD);
|
btrfs_set_opt(info->mount_opt, SSD);
|
||||||
|
|
Loading…
Reference in New Issue