diff mbox

Btrfs: make lzo the default compression scheme

Message ID 4DDDCB57.6090405@cn.fujitsu.com (mailing list archive)
State New, archived
Headers show

Commit Message

Li Zefan May 26, 2011, 3:39 a.m. UTC
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.

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
 fs/btrfs/disk-io.c |    2 +-
 fs/btrfs/ioctl.c   |    2 +-
 fs/btrfs/super.c   |    8 ++++----
 3 files changed, 6 insertions(+), 6 deletions(-)

Comments

Sander May 27, 2011, 7:32 a.m. UTC | #1
Li Zefan wrote (ao):
> 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
Fajar A. Nugraha May 27, 2011, 7:41 a.m. UTC | #2
On Fri, May 27, 2011 at 2:32 PM, Sander <sander@humilis.net> wrote:
> Li Zefan wrote (ao):
>> 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

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.
diff mbox

Patch

diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 16d335b..17c9e3a 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -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) {
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index c4f17e4..a86cc2d 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -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)
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index cd0c7cd..ab9fd9c 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -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;