packagegroup-opendreambox-essential: move to meta-opendreambox
[opendreambox.git] / meta-bsp / common / recipes / linux / linux-dreambox-3.2 / 0003-add-XZ-compression-support-to-UBIFS.patch
1 From 06947401b88c3b0597583aa7f2f497f5ad67993b Mon Sep 17 00:00:00 2001
2 From: Andreas Monzner <andreas.monzner@dream-property.net>
3 Date: Mon, 11 Mar 2013 16:18:45 +0100
4 Subject: [PATCH 03/17] add XZ compression support to UBIFS
5
6 ---
7  Documentation/filesystems/ubifs.txt |  1 +
8  fs/ubifs/Kconfig                    | 10 ++++++++++
9  fs/ubifs/compress.c                 | 25 +++++++++++++++++++++++++
10  fs/ubifs/super.c                    |  2 ++
11  fs/ubifs/ubifs-media.h              |  2 ++
12  5 files changed, 40 insertions(+)
13
14 diff --git a/Documentation/filesystems/ubifs.txt b/Documentation/filesystems/ubifs.txt
15 index a0a61d2..0aa2488 100644
16 --- a/Documentation/filesystems/ubifs.txt
17 +++ b/Documentation/filesystems/ubifs.txt
18 @@ -91,6 +91,7 @@ chk_data_crc          do not skip checking CRCs on data nodes
19  compr=none              override default compressor and set it to "none"
20  compr=lzo               override default compressor and set it to "lzo"
21  compr=zlib              override default compressor and set it to "zlib"
22 +compr=xz                override default compressor and set it to "xz"
23  
24  
25  Quick usage instructions
26 diff --git a/fs/ubifs/Kconfig b/fs/ubifs/Kconfig
27 index f8b0160..5934b99 100644
28 --- a/fs/ubifs/Kconfig
29 +++ b/fs/ubifs/Kconfig
30 @@ -5,8 +5,10 @@ config UBIFS_FS
31         select CRYPTO if UBIFS_FS_ADVANCED_COMPR
32         select CRYPTO if UBIFS_FS_LZO
33         select CRYPTO if UBIFS_FS_ZLIB
34 +       select CRYPTO if UBIFS_FS_XZ
35         select CRYPTO_LZO if UBIFS_FS_LZO
36         select CRYPTO_DEFLATE if UBIFS_FS_ZLIB
37 +       select CRYPTO_XZ if UBIFS_FS_XZ
38         depends on MTD_UBI
39         help
40           UBIFS is a file system for flash devices which works on top of UBI.
41 @@ -42,6 +44,14 @@ config UBIFS_FS_ZLIB
42         help
43           Zlib compresses better than LZO but it is slower. Say 'Y' if unsure.
44  
45 +config UBIFS_FS_XZ
46 +       bool "XZ decompression support" if UBIFS_FS_ADVANCED_COMPR
47 +       depends on UBIFS_FS
48 +       default y
49 +       help
50 +         XZ compresses better the ZLIB but it is slower. 
51 +         Say 'Y' if unsure.
52 +
53  # Debugging-related stuff
54  config UBIFS_FS_DEBUG
55         bool "Enable debugging support"
56 diff --git a/fs/ubifs/compress.c b/fs/ubifs/compress.c
57 index 11e4132..a6e83b5 100644
58 --- a/fs/ubifs/compress.c
59 +++ b/fs/ubifs/compress.c
60 @@ -71,6 +71,24 @@ static struct ubifs_compressor zlib_compr = {
61  };
62  #endif
63  
64 +#ifdef CONFIG_UBIFS_FS_XZ
65 +static DEFINE_MUTEX(xz_enc_mutex);
66 +static DEFINE_MUTEX(xz_dec_mutex);
67 +
68 +static struct ubifs_compressor xz_compr = {
69 +       .compr_type = UBIFS_COMPR_XZ,
70 +       .comp_mutex = &xz_enc_mutex,
71 +       .decomp_mutex = &xz_dec_mutex,
72 +       .name = "xz",
73 +       .capi_name = "xz",
74 +};
75 +#else
76 +static struct ubifs_compressor xz_compr = {
77 +       .compr_type = UBIFS_COMPR_XZ,
78 +       .name = "xz",
79 +};
80 +#endif
81 +
82  /* All UBIFS compressors */
83  struct ubifs_compressor *ubifs_compressors[UBIFS_COMPR_TYPES_CNT];
84  
85 @@ -233,9 +251,15 @@ int __init ubifs_compressors_init(void)
86         if (err)
87                 goto out_lzo;
88  
89 +       err = compr_init(&xz_compr);
90 +       if (err)
91 +               goto out_zlib;
92 +
93         ubifs_compressors[UBIFS_COMPR_NONE] = &none_compr;
94         return 0;
95  
96 +out_zlib:
97 +       compr_exit(&zlib_compr);
98  out_lzo:
99         compr_exit(&lzo_compr);
100         return err;
101 @@ -248,4 +272,5 @@ void ubifs_compressors_exit(void)
102  {
103         compr_exit(&lzo_compr);
104         compr_exit(&zlib_compr);
105 +       compr_exit(&xz_compr);
106  }
107 diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
108 index 2f467e5..7056e8e 100644
109 --- a/fs/ubifs/super.c
110 +++ b/fs/ubifs/super.c
111 @@ -1048,6 +1048,8 @@ static int ubifs_parse_options(struct ubifs_info *c, char *options,
112                                 c->mount_opts.compr_type = UBIFS_COMPR_LZO;
113                         else if (!strcmp(name, "zlib"))
114                                 c->mount_opts.compr_type = UBIFS_COMPR_ZLIB;
115 +                       else if (!strcmp(name, "xz"))
116 +                               c->mount_opts.compr_type = UBIFS_COMPR_XZ;
117                         else {
118                                 ubifs_err("unknown compressor \"%s\"", name);
119                                 kfree(name);
120 diff --git a/fs/ubifs/ubifs-media.h b/fs/ubifs/ubifs-media.h
121 index e24380c..f85e3af 100644
122 --- a/fs/ubifs/ubifs-media.h
123 +++ b/fs/ubifs/ubifs-media.h
124 @@ -332,12 +332,14 @@ enum {
125   * UBIFS_COMPR_NONE: no compression
126   * UBIFS_COMPR_LZO: LZO compression
127   * UBIFS_COMPR_ZLIB: ZLIB compression
128 + * UBIFS_COMPR_XZ: XZ compression
129   * UBIFS_COMPR_TYPES_CNT: count of supported compression types
130   */
131  enum {
132         UBIFS_COMPR_NONE,
133         UBIFS_COMPR_LZO,
134         UBIFS_COMPR_ZLIB,
135 +       UBIFS_COMPR_XZ,
136         UBIFS_COMPR_TYPES_CNT,
137  };
138  
139 -- 
140 1.8.1.2
141