Skip to contentSkip to conversation

Btrfs: make lzo the default compression scheme

PATCH In review Li Zefan 5 participants 5 messages May 26, 2011 – May 28, 2011 Btrfs file system

lore
Share & tools
lore

Li Zefan

author
#0 lore raw

PATCH 1/1 Btrfs: make lzo the default compression scheme

As the lzo compression feature has been established for quite a while, we are now ready to replace zlib with lzo as the default compression scheme.

---
 fs/btrfs/disk-io.c |    2 +-
 fs/btrfs/ioctl.c   |    2 +-
 fs/btrfs/super.c   |    8 ++++----
 3 files changed, 6 insertions(+), 6 deletions(-)
fs/btrfs/disk-io.c +1 -1
index 16d335b..17c9e3a 100644
@@ -1753,7 +1753,7 @@ struct btrfs_root *open_ctree(struct super_block *sb,
 	 * In the long term, we'll store the compression type in the super
 	 * block, and it'll be used for per file compression control.
 	 */
-	fs_info->compress_type = BTRFS_COMPRESS_ZLIB;
+	fs_info->compress_type = BTRFS_COMPRESS_LZO;
 
 	ret = btrfs_parse_options(tree_root, options);
 	if (ret) {
fs/btrfs/ioctl.c +1 -1
index c4f17e4..a86cc2d 100644
@@ -747,7 +747,7 @@ static int btrfs_defrag_file(struct file *file,
 	u64 defrag_end = 0;
 	unsigned long i;
 	int ret;
-	int compress_type = BTRFS_COMPRESS_ZLIB;
+	int compress_type = BTRFS_COMPRESS_LZO;
 
 	if (range->flags & BTRFS_DEFRAG_RANGE_COMPRESS) {
 		if (range->compress_type > BTRFS_COMPRESS_TYPES)
fs/btrfs/super.c +4 -4
index cd0c7cd..ab9fd9c 100644
@@ -257,12 +257,12 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)
 		case Opt_compress_type:
 			if (token == Opt_compress ||
 			    token == Opt_compress_force ||
-			    strcmp(args[0].from, "zlib") == 0) {
-				compress_type = "zlib";
-				info->compress_type = BTRFS_COMPRESS_ZLIB;
-			} else if (strcmp(args[0].from, "lzo") == 0) {
+			    strcmp(args[0].from, "lzo") == 0) {
 				compress_type = "lzo";
 				info->compress_type = BTRFS_COMPRESS_LZO;
+			} else if (strcmp(args[0].from, "zlib") == 0) {
+				compress_type = "zlib";
+				info->compress_type = BTRFS_COMPRESS_ZLIB;
 			} else {
 				ret = -EINVAL;
 				goto out;
Signature · 1 line
1.7.3.1
#1 lore raw

Li Zefan wrote (ao):

Quoted 3 lines

As the lzo compression feature has been established for quite a while, we are now ready to replace zlib with lzo as the default compression scheme.

Please be aware that grub2 currently can't load files from a btrfs with lzo compression (on debian sid/experimental at least).

Just found out the hard way after a kernel upgrade on a system with no separate /boot partition :-)

Found this: https://bugs.archlinux.org/task/23901

Sander

Signature · 2 lines
Humilis IT Services and Solutions
http://www.humilis.net
#2 lore raw
Quoted 5 lines · Sander

Li Zefan wrote (ao):

Quoted 3 lines

As the lzo compression feature has been established for quite a while, we are now ready to replace zlib with lzo as the default compression scheme.

Quoted 7 lines

Please be aware that grub2 currently can't load files from a btrfs with lzo compression (on debian sid/experimental at least).

Just found out the hard way after a kernel upgrade on a system with no separate /boot partition :-)

Found this: https://bugs.archlinux.org/task/23901

IIRC what matters is compression actually used by the files. If /boot/grub/* and kernel/initrd is not compressed, or compressed with zlib, then grub2 can read it just fine, even when the filesystem is usually mounted with -o compress=lzo (I'm using Ubuntu Natty).

I think the move to use lzo compression by default is a good thing, since:
- it's superior performance-wise to zlib
- btrfs is not really recommended (yet) for production uses, so it's valid enough to assume users brave enough to use btrfs will know the necessary workarounds (like having separate /boot, or temporary remount with -o compress=zlib when upgrading kernel)
- even if by accident you ended with unbootable system due to lzo, you can "fix" it using livecd and "btrfs filesystem defragment" to force the needed files to be uncompressed/compressed with zlib.

Signature · 1 line
Fajar
#3 lore raw
Quoted 19 lines · Fajar A. Nugraha
Quoted 5 lines · Sander

Li Zefan wrote (ao):

Quoted 3 lines

As the lzo compression feature has been established for quite a while, we are now ready to replace zlib with lzo as the default compression scheme.

Quoted 7 lines

Please be aware that grub2 currently can't load files from a btrfs with lzo compression (on debian sid/experimental at least).

Just found out the hard way after a kernel upgrade on a system with no separate /boot partition :-)

Found this: https://bugs.archlinux.org/task/23901

IIRC what matters is compression actually used by the files. If /boot/grub/* and kernel/initrd is not compressed, or compressed with zlib, then grub2 can read it just fine, even when the filesystem is usually mounted with -o compress=lzo (I'm using Ubuntu Natty).

Quoted 9 lines

I think the move to use lzo compression by default is a good thing, since:
- it's superior performance-wise to zlib
- btrfs is not really recommended (yet) for production uses, so it's valid enough to assume users brave enough to use btrfs will know the necessary workarounds (like having separate /boot, or temporary remount with -o compress=zlib when upgrading kernel)
- even if by accident you ended with unbootable system due to lzo, you can "fix" it using livecd and "btrfs filesystem defragment" to force the needed files to be uncompressed/compressed with zlib.

i'd agree with the LZO default and everything else you've said, but i was bitten by this too :-)

in my case however, i was using syslinux, and even though /boot was not compressed syslinux still failed with something like:

"Found compressed data! cannot continue!"

... or similar, i don't recall exactly. funny thing is, if i typed out the full kernel boot line (which was super annoying for about a week until i updated to a separate /boot) the system would start up just fine ... so i don't know if syslinux was checking the incompat bit or what, but it failed even though the files themselves were technically ok.

something for others to keep in mind at the least.

C Anthony

#4 lore raw
In reply to Li Zefan

Excerpts from Li Zefan's message of 2011-05-25 23:39:03 -0400:

Quoted 3 lines

As the lzo compression feature has been established for quite a while, we are now ready to replace zlib with lzo as the default compression scheme.

Just FYI I plan to take this for rc2.

-chris