diff options
author | Josef Bacik | 2013-03-07 20:22:04 +0100 |
---|---|---|
committer | Josef Bacik | 2013-05-06 21:54:18 +0200 |
commit | 3173a18f70554fe7880bb2d85c7da566e364eb3c (patch) | |
tree | 0a23b42a8d275d3499fac2b90ded76276c64c1c1 /fs/btrfs/disk-io.c | |
parent | Btrfs: use helper to cleanup tree roots (diff) | |
download | kernel-qcow2-linux-3173a18f70554fe7880bb2d85c7da566e364eb3c.tar.gz kernel-qcow2-linux-3173a18f70554fe7880bb2d85c7da566e364eb3c.tar.xz kernel-qcow2-linux-3173a18f70554fe7880bb2d85c7da566e364eb3c.zip |
Btrfs: add a incompatible format change for smaller metadata extent refs
We currently store the first key of the tree block inside the reference for the
tree block in the extent tree. This takes up quite a bit of space. Make a new
key type for metadata which holds the level as the offset and completely removes
storing the btrfs_tree_block_info inside the extent ref. This reduces the size
from 51 bytes to 33 bytes per extent reference for each tree block. In practice
this results in a 30-35% decrease in the size of our extent tree, which means we
COW less and can keep more of the extent tree in memory which makes our heavy
metadata operations go much faster. This is not an automatic format change, you
must enable it at mkfs time or with btrfstune. This patch deals with having
metadata stored as either the old format or the new format so it is easy to
convert. Thanks,
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r-- | fs/btrfs/disk-io.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index e0665488e512..f47754a2fee4 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -2290,6 +2290,9 @@ int open_ctree(struct super_block *sb, if (tree_root->fs_info->compress_type == BTRFS_COMPRESS_LZO) features |= BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO; + if (features & BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA) + printk(KERN_ERR "btrfs: has skinny extents\n"); + /* * flag our filesystem as having big metadata blocks if * they are bigger than the page size |