aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-tmp/0008-Update-for-lzo-support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-tmp/0008-Update-for-lzo-support.patch')
-rw-r--r--meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-tmp/0008-Update-for-lzo-support.patch203
1 files changed, 203 insertions, 0 deletions
diff --git a/meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-tmp/0008-Update-for-lzo-support.patch b/meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-tmp/0008-Update-for-lzo-support.patch
new file mode 100644
index 0000000000..a1bd4152fb
--- /dev/null
+++ b/meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-tmp/0008-Update-for-lzo-support.patch
@@ -0,0 +1,203 @@
+Upstream-Status: Inappropriate [Backport]
+From 97e64f8cb21685b7359169f3047c0d082b0ff7e8 Mon Sep 17 00:00:00 2001
+From: Li Zefan <lizf@cn.fujitsu.com>
+Date: Thu, 18 Nov 2010 03:49:56 +0000
+Subject: [PATCH 08/15] Update for lzo support
+
+[Btrfs-Progs][V2] Update for lzo support
+
+- Add incompat flag, otherwise btrfs-progs will report error
+ when operating on btrfs filesystems mounted with lzo option.
+
+- Update man page.
+
+- Allow to turn on lzo compression for defrag operation:
+
+ # btrfs filesystem defragment -c[zlib, lzo] <file>
+
+ Note: "-c zlib" will fail, because that's how getopt() works
+ for optional arguments.
+
+Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
+Signed-off-by: Chris Mason <chris.mason@oracle.com>
+---
+ btrfs.c | 2 +-
+ btrfs_cmds.c | 24 ++++++++++++++++++++----
+ ctree.h | 10 +++++++---
+ ioctl.h | 9 ++++++++-
+ man/btrfs.8.in | 10 ++++++----
+ 5 files changed, 42 insertions(+), 13 deletions(-)
+
+diff --git a/btrfs.c b/btrfs.c
+index 46314cf..1b4f403 100644
+--- a/btrfs.c
++++ b/btrfs.c
+@@ -65,7 +65,7 @@ static struct Command commands[] = {
+ "List the recently modified files in a filesystem."
+ },
+ { do_defrag, -1,
+- "filesystem defragment", "[-vcf] [-s start] [-l len] [-t size] <file>|<dir> [<file>|<dir>...]\n"
++ "filesystem defragment", "[-vf] [-c[zlib,lzo]] [-s start] [-l len] [-t size] <file>|<dir> [<file>|<dir>...]\n"
+ "Defragment a file or a directory."
+ },
+ { do_set_default_subvol, 2,
+diff --git a/btrfs_cmds.c b/btrfs_cmds.c
+index c21a007..26d4fcc 100644
+--- a/btrfs_cmds.c
++++ b/btrfs_cmds.c
+@@ -142,10 +142,21 @@ static u64 parse_size(char *s)
+ return atoll(s) * mult;
+ }
+
++static int parse_compress_type(char *s)
++{
++ if (strcmp(optarg, "zlib") == 0)
++ return BTRFS_COMPRESS_ZLIB;
++ else if (strcmp(optarg, "lzo") == 0)
++ return BTRFS_COMPRESS_LZO;
++ else {
++ fprintf(stderr, "Unknown compress type %s\n", s);
++ exit(1);
++ };
++}
++
+ int do_defrag(int ac, char **av)
+ {
+ int fd;
+- int compress = 0;
+ int flush = 0;
+ u64 start = 0;
+ u64 len = (u64)-1;
+@@ -157,15 +168,18 @@ int do_defrag(int ac, char **av)
+ int fancy_ioctl = 0;
+ struct btrfs_ioctl_defrag_range_args range;
+ int e=0;
++ int compress_type = BTRFS_COMPRESS_NONE;
+
+ optind = 1;
+ while(1) {
+- int c = getopt(ac, av, "vcfs:l:t:");
++ int c = getopt(ac, av, "vc::fs:l:t:");
+ if (c < 0)
+ break;
+ switch(c) {
+ case 'c':
+- compress = 1;
++ compress_type = BTRFS_COMPRESS_ZLIB;
++ if (optarg)
++ compress_type = parse_compress_type(optarg);
+ fancy_ioctl = 1;
+ break;
+ case 'f':
+@@ -203,8 +217,10 @@ int do_defrag(int ac, char **av)
+ range.start = start;
+ range.len = len;
+ range.extent_thresh = thresh;
+- if (compress)
++ if (compress_type) {
+ range.flags |= BTRFS_DEFRAG_RANGE_COMPRESS;
++ range.compress_type = compress_type;
++ }
+ if (flush)
+ range.flags |= BTRFS_DEFRAG_RANGE_START_IO;
+
+diff --git a/ctree.h b/ctree.h
+index ed83d02..61eb639 100644
+--- a/ctree.h
++++ b/ctree.h
+@@ -354,12 +354,14 @@ struct btrfs_super_block {
+ #define BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF (1ULL << 0)
+ #define BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL (1ULL << 1)
+ #define BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS (1ULL << 2)
++#define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO (1ULL << 3)
+
+ #define BTRFS_FEATURE_COMPAT_SUPP 0ULL
+ #define BTRFS_FEATURE_COMPAT_RO_SUPP 0ULL
+ #define BTRFS_FEATURE_INCOMPAT_SUPP \
+ (BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF | \
+ BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL | \
++ BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO | \
+ BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS)
+
+ /*
+@@ -505,9 +507,11 @@ struct btrfs_timespec {
+ } __attribute__ ((__packed__));
+
+ typedef enum {
+- BTRFS_COMPRESS_NONE = 0,
+- BTRFS_COMPRESS_ZLIB = 1,
+- BTRFS_COMPRESS_LAST = 2,
++ BTRFS_COMPRESS_NONE = 0,
++ BTRFS_COMPRESS_ZLIB = 1,
++ BTRFS_COMPRESS_LZO = 2,
++ BTRFS_COMPRESS_TYPES = 2,
++ BTRFS_COMPRESS_LAST = 3,
+ } btrfs_compression_type;
+
+ /* we don't understand any encryption methods right now */
+diff --git a/ioctl.h b/ioctl.h
+index 776d7a9..bb7b9e0 100644
+--- a/ioctl.h
++++ b/ioctl.h
+@@ -116,8 +116,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 {
+diff --git a/man/btrfs.8.in b/man/btrfs.8.in
+index cba2de1..1ffed13 100644
+--- a/man/btrfs.8.in
++++ b/man/btrfs.8.in
+@@ -15,12 +15,12 @@ btrfs \- control a btrfs filesystem
+ .PP
+ \fBbtrfs\fP \fBsubvolume set-default\fP\fI <id> <path>\fP
+ .PP
+-\fBbtrfs\fP \fBfilesystem defragment\fP\fI [-vcf] [-s start] [-l len] [-t size] <file>|<dir> [<file>|<dir>...]\fP
+-.PP
+ \fBbtrfs\fP \fBfilesystem sync\fP\fI <path> \fP
+ .PP
+ \fBbtrfs\fP \fBfilesystem resize\fP\fI [+/\-]<size>[gkm]|max <filesystem>\fP
+ .PP
++\fBbtrfs\fP \fBfilesystem defrag\fP\fI [options] <file>|<dir> [<file>|<dir>...]\fP
++.PP
+ \fBbtrfs\fP \fBdevice scan\fP\fI [<device> [<device>..]]\fP
+ .PP
+ \fBbtrfs\fP \fBdevice show\fP\fI <dev>|<label> [<dev>|<label>...]\fP
+@@ -30,7 +30,6 @@ btrfs \- control a btrfs filesystem
+ \fBbtrfs\fP \fBdevice add\fP\fI <dev> [<dev>..] <path> \fP
+ .PP
+ \fBbtrfs\fP \fBdevice delete\fP\fI <dev> [<dev>..] <path> \fP]
+-
+ .PP
+ \fBbtrfs\fP \fBhelp|\-\-help|\-h \fP\fI\fP
+ .PP
+@@ -104,10 +103,13 @@ Set the subvolume of the filesystem \fI<path>\fR which is mounted as
+ is returned by the \fBsubvolume list\fR command.
+ .TP
+
+-\fBfilesystem defragment\fP\fI [-vcf] [-s start] [-l len] [-t size] <file>|<dir> [<file>|<dir>...]\fR
++\fBfilesystem defragment\fP -c[zlib|lzo] [-l \fIlen\fR] [-s \fIstart\fR] [-t \fIsize\fR] -[vf] <\fIfile\fR>|<\fIdir\fR> [<\fIfile\fR>|<\fIdir\fR>...]
++
+ Defragment file data and/or directory metadata. To defragment all files in a
+ directory you have to specify each one on its own or use your shell wildcards.
+
++The start position and the number of bytes to deframention can be specified by \fIstart\fR and \fIlen\fR. Any extent bigger than \fIthresh\fR will be considered already defragged. Use 0 to take the kernel default, and use 1 to say eveery single extent must be rewritten. You can also turn on compression in defragment operations.
++
+ \fB-v\fP be verbose
+
+ \fB-c\fP compress file contents while defragmenting
+--
+1.7.2.3
+