summaryrefslogtreecommitdiffstats
path: root/meta/packages/mtd/mtd-utils/favour_lzo.patch
diff options
context:
space:
mode:
authorRichard Purdie <richard@openedhand.com>2007-03-01 12:14:38 +0000
committerRichard Purdie <richard@openedhand.com>2007-03-01 12:14:38 +0000
commit26c9b6e77c050390805bd94005bd52c71fe6cb25 (patch)
tree580998c521cdae188552f6a430a725ba692725c9 /meta/packages/mtd/mtd-utils/favour_lzo.patch
parente2a7250b8983723d88d72865178ce95d7f06da56 (diff)
downloadpoky-26c9b6e77c050390805bd94005bd52c71fe6cb25.tar.gz
mtd-utils: Add 1.0.0 and git versions. Patch git version with lzo support
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@1300 311d38ba-8fff-0310-9ca6-ca027cbcb966
Diffstat (limited to 'meta/packages/mtd/mtd-utils/favour_lzo.patch')
-rw-r--r--meta/packages/mtd/mtd-utils/favour_lzo.patch136
1 files changed, 136 insertions, 0 deletions
diff --git a/meta/packages/mtd/mtd-utils/favour_lzo.patch b/meta/packages/mtd/mtd-utils/favour_lzo.patch
new file mode 100644
index 0000000000..9e55d5f4b3
--- /dev/null
+++ b/meta/packages/mtd/mtd-utils/favour_lzo.patch
@@ -0,0 +1,136 @@
1Add a favourlzo compression mode to mtd-utils
2
3This allows lzo compression to be used in the cases where the
4compression ratio isn't quite as good zlib. This can make sense in
5certain use cases because LZO decompression is much faster than zlib.
6
7Signed-off-by: Richard Purdie <rpurdie@openedhand.com>
8
9---
10 compr.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++---
11 compr.h | 1 +
12 2 files changed, 50 insertions(+), 3 deletions(-)
13
14Index: git/compr.c
15===================================================================
16--- git.orig/compr.c 2007-03-01 11:58:01.000000000 +0000
17+++ git/compr.c 2007-03-01 11:58:09.000000000 +0000
18@@ -16,6 +16,8 @@
19 #include <stdlib.h>
20 #include <linux/jffs2.h>
21
22+#define FAVOUR_LZO_PERCENT 80
23+
24 extern int page_size;
25
26 /* LIST IMPLEMENTATION (from linux/list.h) */
27@@ -166,6 +168,33 @@ static void jffs2_decompression_test(str
28 }
29 }
30
31+/*
32+ * Return 1 to use this compression
33+ */
34+static int jffs2_is_best_compression(struct jffs2_compressor *this,
35+ struct jffs2_compressor *best, uint32_t size, uint32_t bestsize)
36+{
37+ switch (jffs2_compression_mode) {
38+ case JFFS2_COMPR_MODE_SIZE:
39+ if (bestsize > size)
40+ return 1;
41+ return 0;
42+ case JFFS2_COMPR_MODE_FAVOURLZO:
43+ if ((this->compr == JFFS2_COMPR_LZO) && (bestsize > size))
44+ return 1;
45+ if ((best->compr != JFFS2_COMPR_LZO) && (bestsize > size))
46+ return 1;
47+ if ((this->compr == JFFS2_COMPR_LZO) && (bestsize > (size * FAVOUR_LZO_PERCENT / 100)))
48+ return 1;
49+ if ((bestsize * FAVOUR_LZO_PERCENT / 100) > size)
50+ return 1;
51+
52+ return 0;
53+ }
54+ /* Shouldn't happen */
55+ return 0;
56+}
57+
58 /* jffs2_compress:
59 * @data: Pointer to uncompressed data
60 * @cdata: Pointer to returned pointer to buffer for compressed data
61@@ -231,21 +260,29 @@ uint16_t jffs2_compress( unsigned char *
62 }
63 if (ret == JFFS2_COMPR_NONE) free(output_buf);
64 break;
65+ case JFFS2_COMPR_MODE_FAVOURLZO:
66 case JFFS2_COMPR_MODE_SIZE:
67 orig_slen = *datalen;
68 orig_dlen = *cdatalen;
69 list_for_each_entry(this, &jffs2_compressor_list, list) {
70+ uint32_t needed_buf_size;
71+
72+ if (jffs2_compression_mode == JFFS2_COMPR_MODE_FAVOURLZO)
73+ needed_buf_size = orig_slen+jffs2_compression_check;
74+ else
75+ needed_buf_size = orig_dlen+jffs2_compression_check;
76+
77 /* Skip decompress-only backwards-compatibility and disabled modules */
78 if ((!this->compress)||(this->disabled))
79 continue;
80 /* Allocating memory for output buffer if necessary */
81- if ((this->compr_buf_size<orig_dlen+jffs2_compression_check)&&(this->compr_buf)) {
82+ if ((this->compr_buf_size < needed_buf_size) && (this->compr_buf)) {
83 free(this->compr_buf);
84 this->compr_buf_size=0;
85 this->compr_buf=NULL;
86 }
87 if (!this->compr_buf) {
88- tmp_buf = malloc(orig_dlen+jffs2_compression_check);
89+ tmp_buf = malloc(needed_buf_size);
90 if (!tmp_buf) {
91 fprintf(stderr,"mkfs.jffs2: No memory for compressor allocation. (%d bytes)\n",orig_dlen);
92 continue;
93@@ -265,7 +302,8 @@ uint16_t jffs2_compress( unsigned char *
94 if (!compr_ret) {
95 if (jffs2_compression_check)
96 jffs2_decompression_test(this, data_in, this->compr_buf, *cdatalen, *datalen, this->compr_buf_size);
97- if ((!best_dlen)||(best_dlen>*cdatalen)) {
98+ if (((!best_dlen) || jffs2_is_best_compression(this, best, *cdatalen, best_dlen))
99+ && (*cdatalen < *datalen)) {
100 best_dlen = *cdatalen;
101 best_slen = *datalen;
102 best = this;
103@@ -377,6 +415,9 @@ char *jffs2_stats(void)
104 case JFFS2_COMPR_MODE_SIZE:
105 act_buf += sprintf(act_buf,"size");
106 break;
107+ case JFFS2_COMPR_MODE_FAVOURLZO:
108+ act_buf += sprintf(act_buf,"favourlzo");
109+ break;
110 default:
111 act_buf += sprintf(act_buf,"unkown");
112 break;
113@@ -413,6 +454,11 @@ int jffs2_set_compression_mode_name(cons
114 jffs2_compression_mode = JFFS2_COMPR_MODE_SIZE;
115 return 0;
116 }
117+ if (!strcmp("favourlzo", name)) {
118+ jffs2_compression_mode = JFFS2_COMPR_MODE_FAVOURLZO;
119+ return 0;
120+ }
121+
122 return 1;
123 }
124
125Index: git/compr.h
126===================================================================
127--- git.orig/compr.h 2007-03-01 11:58:01.000000000 +0000
128+++ git/compr.h 2007-03-01 11:58:09.000000000 +0000
129@@ -32,6 +32,7 @@
130 #define JFFS2_COMPR_MODE_NONE 0
131 #define JFFS2_COMPR_MODE_PRIORITY 1
132 #define JFFS2_COMPR_MODE_SIZE 2
133+#define JFFS2_COMPR_MODE_FAVOURLZO 3
134
135 #define kmalloc(a,b) malloc(a)
136 #define kfree(a) free(a)