diff options
| -rw-r--r-- | fs/Kconfig | 54 | ||||
| -rw-r--r-- | fs/jffs2/background.c | 4 | ||||
| -rw-r--r-- | fs/jffs2/compr.c | 381 | ||||
| -rw-r--r-- | fs/jffs2/compr.h | 44 | ||||
| -rw-r--r-- | fs/jffs2/compr_rtime.c | 2 | ||||
| -rw-r--r-- | fs/jffs2/compr_rubin.c | 4 | ||||
| -rw-r--r-- | fs/jffs2/compr_zlib.c | 6 | ||||
| -rw-r--r-- | fs/jffs2/dir.c | 4 | ||||
| -rw-r--r-- | fs/jffs2/erase.c | 4 | ||||
| -rw-r--r-- | fs/jffs2/gc.c | 4 | ||||
| -rw-r--r-- | fs/jffs2/nodelist.h | 2 | ||||
| -rw-r--r-- | fs/jffs2/nodemgmt.c | 2 | ||||
| -rw-r--r-- | fs/jffs2/readinode.c | 6 | ||||
| -rw-r--r-- | fs/jffs2/scan.c | 2 | ||||
| -rw-r--r-- | fs/jffs2/security.c | 6 | ||||
| -rw-r--r-- | fs/jffs2/summary.c | 8 | ||||
| -rw-r--r-- | fs/jffs2/summary.h | 6 | ||||
| -rw-r--r-- | fs/jffs2/wbuf.c | 4 | ||||
| -rw-r--r-- | fs/jffs2/xattr.h | 2 | ||||
| -rw-r--r-- | fs/jffs2/xattr_user.c | 4 |
20 files changed, 275 insertions, 274 deletions
diff --git a/fs/Kconfig b/fs/Kconfig index 0fa0c1193e81..e9c5b81dd665 100644 --- a/fs/Kconfig +++ b/fs/Kconfig | |||
| @@ -1298,52 +1298,52 @@ config JFFS2_ZLIB | |||
| 1298 | select ZLIB_DEFLATE | 1298 | select ZLIB_DEFLATE |
| 1299 | depends on JFFS2_FS | 1299 | depends on JFFS2_FS |
| 1300 | default y | 1300 | default y |
| 1301 | help | 1301 | help |
| 1302 | Zlib is designed to be a free, general-purpose, legally unencumbered, | 1302 | Zlib is designed to be a free, general-purpose, legally unencumbered, |
| 1303 | lossless data-compression library for use on virtually any computer | 1303 | lossless data-compression library for use on virtually any computer |
| 1304 | hardware and operating system. See <http://www.gzip.org/zlib/> for | 1304 | hardware and operating system. See <http://www.gzip.org/zlib/> for |
| 1305 | further information. | 1305 | further information. |
| 1306 | 1306 | ||
| 1307 | Say 'Y' if unsure. | 1307 | Say 'Y' if unsure. |
| 1308 | 1308 | ||
| 1309 | config JFFS2_RTIME | 1309 | config JFFS2_RTIME |
| 1310 | bool "JFFS2 RTIME compression support" if JFFS2_COMPRESSION_OPTIONS | 1310 | bool "JFFS2 RTIME compression support" if JFFS2_COMPRESSION_OPTIONS |
| 1311 | depends on JFFS2_FS | 1311 | depends on JFFS2_FS |
| 1312 | default y | 1312 | default y |
| 1313 | help | 1313 | help |
| 1314 | Rtime does manage to recompress already-compressed data. Say 'Y' if unsure. | 1314 | Rtime does manage to recompress already-compressed data. Say 'Y' if unsure. |
| 1315 | 1315 | ||
| 1316 | config JFFS2_RUBIN | 1316 | config JFFS2_RUBIN |
| 1317 | bool "JFFS2 RUBIN compression support" if JFFS2_COMPRESSION_OPTIONS | 1317 | bool "JFFS2 RUBIN compression support" if JFFS2_COMPRESSION_OPTIONS |
| 1318 | depends on JFFS2_FS | 1318 | depends on JFFS2_FS |
| 1319 | default n | 1319 | default n |
| 1320 | help | 1320 | help |
| 1321 | RUBINMIPS and DYNRUBIN compressors. Say 'N' if unsure. | 1321 | RUBINMIPS and DYNRUBIN compressors. Say 'N' if unsure. |
| 1322 | 1322 | ||
| 1323 | choice | 1323 | choice |
| 1324 | prompt "JFFS2 default compression mode" if JFFS2_COMPRESSION_OPTIONS | 1324 | prompt "JFFS2 default compression mode" if JFFS2_COMPRESSION_OPTIONS |
| 1325 | default JFFS2_CMODE_PRIORITY | 1325 | default JFFS2_CMODE_PRIORITY |
| 1326 | depends on JFFS2_FS | 1326 | depends on JFFS2_FS |
| 1327 | help | 1327 | help |
| 1328 | You can set here the default compression mode of JFFS2 from | 1328 | You can set here the default compression mode of JFFS2 from |
| 1329 | the available compression modes. Don't touch if unsure. | 1329 | the available compression modes. Don't touch if unsure. |
| 1330 | 1330 | ||
| 1331 | config JFFS2_CMODE_NONE | 1331 | config JFFS2_CMODE_NONE |
| 1332 | bool "no compression" | 1332 | bool "no compression" |
| 1333 | help | 1333 | help |
| 1334 | Uses no compression. | 1334 | Uses no compression. |
| 1335 | 1335 | ||
| 1336 | config JFFS2_CMODE_PRIORITY | 1336 | config JFFS2_CMODE_PRIORITY |
| 1337 | bool "priority" | 1337 | bool "priority" |
| 1338 | help | 1338 | help |
| 1339 | Tries the compressors in a predefined order and chooses the first | 1339 | Tries the compressors in a predefined order and chooses the first |
| 1340 | successful one. | 1340 | successful one. |
| 1341 | 1341 | ||
| 1342 | config JFFS2_CMODE_SIZE | 1342 | config JFFS2_CMODE_SIZE |
| 1343 | bool "size (EXPERIMENTAL)" | 1343 | bool "size (EXPERIMENTAL)" |
| 1344 | help | 1344 | help |
| 1345 | Tries all compressors and chooses the one which has the smallest | 1345 | Tries all compressors and chooses the one which has the smallest |
| 1346 | result. | 1346 | result. |
| 1347 | 1347 | ||
| 1348 | endchoice | 1348 | endchoice |
| 1349 | 1349 | ||
diff --git a/fs/jffs2/background.c b/fs/jffs2/background.c index 39bd6c7a9b62..8754b2742112 100644 --- a/fs/jffs2/background.c +++ b/fs/jffs2/background.c | |||
| @@ -23,8 +23,8 @@ static int jffs2_garbage_collect_thread(void *); | |||
| 23 | void jffs2_garbage_collect_trigger(struct jffs2_sb_info *c) | 23 | void jffs2_garbage_collect_trigger(struct jffs2_sb_info *c) |
| 24 | { | 24 | { |
| 25 | spin_lock(&c->erase_completion_lock); | 25 | spin_lock(&c->erase_completion_lock); |
| 26 | if (c->gc_task && jffs2_thread_should_wake(c)) | 26 | if (c->gc_task && jffs2_thread_should_wake(c)) |
| 27 | send_sig(SIGHUP, c->gc_task, 1); | 27 | send_sig(SIGHUP, c->gc_task, 1); |
| 28 | spin_unlock(&c->erase_completion_lock); | 28 | spin_unlock(&c->erase_completion_lock); |
| 29 | } | 29 | } |
| 30 | 30 | ||
diff --git a/fs/jffs2/compr.c b/fs/jffs2/compr.c index 485d065de41f..d90ca05e4992 100644 --- a/fs/jffs2/compr.c +++ b/fs/jffs2/compr.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | * Created by Arjan van de Ven <arjanv@redhat.com> | 5 | * Created by Arjan van de Ven <arjanv@redhat.com> |
| 6 | * | 6 | * |
| 7 | * Copyright © 2004 Ferenc Havasi <havasi@inf.u-szeged.hu>, | 7 | * Copyright © 2004 Ferenc Havasi <havasi@inf.u-szeged.hu>, |
| 8 | * University of Szeged, Hungary | 8 | * University of Szeged, Hungary |
| 9 | * | 9 | * |
| 10 | * For licensing information, see the file 'LICENCE' in this directory. | 10 | * For licensing information, see the file 'LICENCE' in this directory. |
| 11 | * | 11 | * |
| @@ -43,121 +43,122 @@ static uint32_t none_stat_compr_blocks=0,none_stat_decompr_blocks=0,none_stat_co | |||
| 43 | * *datalen accordingly to show the amount of data which were compressed. | 43 | * *datalen accordingly to show the amount of data which were compressed. |
| 44 | */ | 44 | */ |
| 45 | uint16_t jffs2_compress(struct jffs2_sb_info *c, struct jffs2_inode_info *f, | 45 | uint16_t jffs2_compress(struct jffs2_sb_info *c, struct jffs2_inode_info *f, |
| 46 | unsigned char *data_in, unsigned char **cpage_out, | 46 | unsigned char *data_in, unsigned char **cpage_out, |
| 47 | uint32_t *datalen, uint32_t *cdatalen) | 47 | uint32_t *datalen, uint32_t *cdatalen) |
| 48 | { | 48 | { |
| 49 | int ret = JFFS2_COMPR_NONE; | 49 | int ret = JFFS2_COMPR_NONE; |
| 50 | int compr_ret; | 50 | int compr_ret; |
| 51 | struct jffs2_compressor *this, *best=NULL; | 51 | struct jffs2_compressor *this, *best=NULL; |
| 52 | unsigned char *output_buf = NULL, *tmp_buf; | 52 | unsigned char *output_buf = NULL, *tmp_buf; |
| 53 | uint32_t orig_slen, orig_dlen; | 53 | uint32_t orig_slen, orig_dlen; |
| 54 | uint32_t best_slen=0, best_dlen=0; | 54 | uint32_t best_slen=0, best_dlen=0; |
| 55 | 55 | ||
| 56 | switch (jffs2_compression_mode) { | 56 | switch (jffs2_compression_mode) { |
| 57 | case JFFS2_COMPR_MODE_NONE: | 57 | case JFFS2_COMPR_MODE_NONE: |
| 58 | break; | 58 | break; |
| 59 | case JFFS2_COMPR_MODE_PRIORITY: | 59 | case JFFS2_COMPR_MODE_PRIORITY: |
| 60 | output_buf = kmalloc(*cdatalen,GFP_KERNEL); | 60 | output_buf = kmalloc(*cdatalen,GFP_KERNEL); |
| 61 | if (!output_buf) { | 61 | if (!output_buf) { |
| 62 | printk(KERN_WARNING "JFFS2: No memory for compressor allocation. Compression failed.\n"); | 62 | printk(KERN_WARNING "JFFS2: No memory for compressor allocation. Compression failed.\n"); |
| 63 | goto out; | 63 | goto out; |
| 64 | } | 64 | } |
| 65 | orig_slen = *datalen; | 65 | orig_slen = *datalen; |
| 66 | orig_dlen = *cdatalen; | 66 | orig_dlen = *cdatalen; |
| 67 | spin_lock(&jffs2_compressor_list_lock); | 67 | spin_lock(&jffs2_compressor_list_lock); |
| 68 | list_for_each_entry(this, &jffs2_compressor_list, list) { | 68 | list_for_each_entry(this, &jffs2_compressor_list, list) { |
| 69 | /* Skip decompress-only backwards-compatibility and disabled modules */ | 69 | /* Skip decompress-only backwards-compatibility and disabled modules */ |
| 70 | if ((!this->compress)||(this->disabled)) | 70 | if ((!this->compress)||(this->disabled)) |
| 71 | continue; | 71 | continue; |
| 72 | 72 | ||
| 73 | this->usecount++; | 73 | this->usecount++; |
| 74 | spin_unlock(&jffs2_compressor_list_lock); | 74 | spin_unlock(&jffs2_compressor_list_lock); |
| 75 | *datalen = orig_slen; | 75 | *datalen = orig_slen; |
| 76 | *cdatalen = orig_dlen; | 76 | *cdatalen = orig_dlen; |
| 77 | compr_ret = this->compress(data_in, output_buf, datalen, cdatalen, NULL); | 77 | compr_ret = this->compress(data_in, output_buf, datalen, cdatalen, NULL); |
| 78 | spin_lock(&jffs2_compressor_list_lock); | 78 | spin_lock(&jffs2_compressor_list_lock); |
| 79 | this->usecount--; | 79 | this->usecount--; |
| 80 | if (!compr_ret) { | 80 | if (!compr_ret) { |
| 81 | ret = this->compr; | 81 | ret = this->compr; |
| 82 | this->stat_compr_blocks++; | 82 | this->stat_compr_blocks++; |
| 83 | this->stat_compr_orig_size += *datalen; | 83 | this->stat_compr_orig_size += *datalen; |
| 84 | this->stat_compr_new_size += *cdatalen; | 84 | this->stat_compr_new_size += *cdatalen; |
| 85 | break; | 85 | break; |
| 86 | } | 86 | } |
| 87 | } | 87 | } |
| 88 | spin_unlock(&jffs2_compressor_list_lock); | 88 | spin_unlock(&jffs2_compressor_list_lock); |
| 89 | if (ret == JFFS2_COMPR_NONE) kfree(output_buf); | 89 | if (ret == JFFS2_COMPR_NONE) |
| 90 | break; | 90 | kfree(output_buf); |
| 91 | case JFFS2_COMPR_MODE_SIZE: | 91 | break; |
| 92 | orig_slen = *datalen; | 92 | case JFFS2_COMPR_MODE_SIZE: |
| 93 | orig_dlen = *cdatalen; | 93 | orig_slen = *datalen; |
| 94 | spin_lock(&jffs2_compressor_list_lock); | 94 | orig_dlen = *cdatalen; |
| 95 | list_for_each_entry(this, &jffs2_compressor_list, list) { | 95 | spin_lock(&jffs2_compressor_list_lock); |
| 96 | /* Skip decompress-only backwards-compatibility and disabled modules */ | 96 | list_for_each_entry(this, &jffs2_compressor_list, list) { |
| 97 | if ((!this->compress)||(this->disabled)) | 97 | /* Skip decompress-only backwards-compatibility and disabled modules */ |
| 98 | continue; | 98 | if ((!this->compress)||(this->disabled)) |
| 99 | /* Allocating memory for output buffer if necessary */ | 99 | continue; |
| 100 | if ((this->compr_buf_size<orig_dlen)&&(this->compr_buf)) { | 100 | /* Allocating memory for output buffer if necessary */ |
| 101 | spin_unlock(&jffs2_compressor_list_lock); | 101 | if ((this->compr_buf_size<orig_dlen)&&(this->compr_buf)) { |
| 102 | kfree(this->compr_buf); | 102 | spin_unlock(&jffs2_compressor_list_lock); |
| 103 | spin_lock(&jffs2_compressor_list_lock); | 103 | kfree(this->compr_buf); |
| 104 | this->compr_buf_size=0; | 104 | spin_lock(&jffs2_compressor_list_lock); |
| 105 | this->compr_buf=NULL; | 105 | this->compr_buf_size=0; |
| 106 | } | 106 | this->compr_buf=NULL; |
| 107 | if (!this->compr_buf) { | 107 | } |
| 108 | spin_unlock(&jffs2_compressor_list_lock); | 108 | if (!this->compr_buf) { |
| 109 | tmp_buf = kmalloc(orig_dlen,GFP_KERNEL); | 109 | spin_unlock(&jffs2_compressor_list_lock); |
| 110 | spin_lock(&jffs2_compressor_list_lock); | 110 | tmp_buf = kmalloc(orig_dlen,GFP_KERNEL); |
| 111 | if (!tmp_buf) { | 111 | spin_lock(&jffs2_compressor_list_lock); |
| 112 | printk(KERN_WARNING "JFFS2: No memory for compressor allocation. (%d bytes)\n",orig_dlen); | 112 | if (!tmp_buf) { |
| 113 | continue; | 113 | printk(KERN_WARNING "JFFS2: No memory for compressor allocation. (%d bytes)\n",orig_dlen); |
| 114 | } | 114 | continue; |
| 115 | else { | 115 | } |
| 116 | this->compr_buf = tmp_buf; | 116 | else { |
| 117 | this->compr_buf_size = orig_dlen; | 117 | this->compr_buf = tmp_buf; |
| 118 | } | 118 | this->compr_buf_size = orig_dlen; |
| 119 | } | 119 | } |
| 120 | this->usecount++; | 120 | } |
| 121 | spin_unlock(&jffs2_compressor_list_lock); | 121 | this->usecount++; |
| 122 | *datalen = orig_slen; | 122 | spin_unlock(&jffs2_compressor_list_lock); |
| 123 | *cdatalen = orig_dlen; | 123 | *datalen = orig_slen; |
| 124 | compr_ret = this->compress(data_in, this->compr_buf, datalen, cdatalen, NULL); | 124 | *cdatalen = orig_dlen; |
| 125 | spin_lock(&jffs2_compressor_list_lock); | 125 | compr_ret = this->compress(data_in, this->compr_buf, datalen, cdatalen, NULL); |
| 126 | this->usecount--; | 126 | spin_lock(&jffs2_compressor_list_lock); |
| 127 | if (!compr_ret) { | 127 | this->usecount--; |
| 128 | if ((!best_dlen)||(best_dlen>*cdatalen)) { | 128 | if (!compr_ret) { |
| 129 | best_dlen = *cdatalen; | 129 | if ((!best_dlen)||(best_dlen>*cdatalen)) { |
| 130 | best_slen = *datalen; | 130 | best_dlen = *cdatalen; |
| 131 | best = this; | 131 | best_slen = *datalen; |
| 132 | } | 132 | best = this; |
| 133 | } | 133 | } |
| 134 | } | 134 | } |
| 135 | if (best_dlen) { | 135 | } |
| 136 | *cdatalen = best_dlen; | 136 | if (best_dlen) { |
| 137 | *datalen = best_slen; | 137 | *cdatalen = best_dlen; |
| 138 | output_buf = best->compr_buf; | 138 | *datalen = best_slen; |
| 139 | best->compr_buf = NULL; | 139 | output_buf = best->compr_buf; |
| 140 | best->compr_buf_size = 0; | 140 | best->compr_buf = NULL; |
| 141 | best->stat_compr_blocks++; | 141 | best->compr_buf_size = 0; |
| 142 | best->stat_compr_orig_size += best_slen; | 142 | best->stat_compr_blocks++; |
| 143 | best->stat_compr_new_size += best_dlen; | 143 | best->stat_compr_orig_size += best_slen; |
| 144 | ret = best->compr; | 144 | best->stat_compr_new_size += best_dlen; |
| 145 | } | 145 | ret = best->compr; |
| 146 | spin_unlock(&jffs2_compressor_list_lock); | 146 | } |
| 147 | break; | 147 | spin_unlock(&jffs2_compressor_list_lock); |
| 148 | default: | 148 | break; |
| 149 | printk(KERN_ERR "JFFS2: unknow compression mode.\n"); | 149 | default: |
| 150 | } | 150 | printk(KERN_ERR "JFFS2: unknow compression mode.\n"); |
| 151 | } | ||
| 151 | out: | 152 | out: |
| 152 | if (ret == JFFS2_COMPR_NONE) { | 153 | if (ret == JFFS2_COMPR_NONE) { |
| 153 | *cpage_out = data_in; | 154 | *cpage_out = data_in; |
| 154 | *datalen = *cdatalen; | 155 | *datalen = *cdatalen; |
| 155 | none_stat_compr_blocks++; | 156 | none_stat_compr_blocks++; |
| 156 | none_stat_compr_size += *datalen; | 157 | none_stat_compr_size += *datalen; |
| 157 | } | 158 | } |
| 158 | else { | 159 | else { |
| 159 | *cpage_out = output_buf; | 160 | *cpage_out = output_buf; |
| 160 | } | 161 | } |
| 161 | return ret; | 162 | return ret; |
| 162 | } | 163 | } |
| 163 | 164 | ||
| @@ -165,8 +166,8 @@ int jffs2_decompress(struct jffs2_sb_info *c, struct jffs2_inode_info *f, | |||
| 165 | uint16_t comprtype, unsigned char *cdata_in, | 166 | uint16_t comprtype, unsigned char *cdata_in, |
| 166 | unsigned char *data_out, uint32_t cdatalen, uint32_t datalen) | 167 | unsigned char *data_out, uint32_t cdatalen, uint32_t datalen) |
| 167 | { | 168 | { |
| 168 | struct jffs2_compressor *this; | 169 | struct jffs2_compressor *this; |
| 169 | int ret; | 170 | int ret; |
| 170 | 171 | ||
| 171 | /* Older code had a bug where it would write non-zero 'usercompr' | 172 | /* Older code had a bug where it would write non-zero 'usercompr' |
| 172 | fields. Deal with it. */ | 173 | fields. Deal with it. */ |
| @@ -177,32 +178,32 @@ int jffs2_decompress(struct jffs2_sb_info *c, struct jffs2_inode_info *f, | |||
| 177 | case JFFS2_COMPR_NONE: | 178 | case JFFS2_COMPR_NONE: |
| 178 | /* This should be special-cased elsewhere, but we might as well deal with it */ | 179 | /* This should be special-cased elsewhere, but we might as well deal with it */ |
| 179 | memcpy(data_out, cdata_in, datalen); | 180 | memcpy(data_out, cdata_in, datalen); |
| 180 | none_stat_decompr_blocks++; | 181 | none_stat_decompr_blocks++; |
| 181 | break; | 182 | break; |
| 182 | case JFFS2_COMPR_ZERO: | 183 | case JFFS2_COMPR_ZERO: |
| 183 | memset(data_out, 0, datalen); | 184 | memset(data_out, 0, datalen); |
| 184 | break; | 185 | break; |
| 185 | default: | 186 | default: |
| 186 | spin_lock(&jffs2_compressor_list_lock); | 187 | spin_lock(&jffs2_compressor_list_lock); |
| 187 | list_for_each_entry(this, &jffs2_compressor_list, list) { | 188 | list_for_each_entry(this, &jffs2_compressor_list, list) { |
| 188 | if (comprtype == this->compr) { | 189 | if (comprtype == this->compr) { |
| 189 | this->usecount++; | 190 | this->usecount++; |
| 190 | spin_unlock(&jffs2_compressor_list_lock); | 191 | spin_unlock(&jffs2_compressor_list_lock); |
| 191 | ret = this->decompress(cdata_in, data_out, cdatalen, datalen, NULL); | 192 | ret = this->decompress(cdata_in, data_out, cdatalen, datalen, NULL); |
| 192 | spin_lock(&jffs2_compressor_list_lock); | 193 | spin_lock(&jffs2_compressor_list_lock); |
| 193 | if (ret) { | 194 | if (ret) { |
| 194 | printk(KERN_WARNING "Decompressor \"%s\" returned %d\n", this->name, ret); | 195 | printk(KERN_WARNING "Decompressor \"%s\" returned %d\n", this->name, ret); |
| 195 | } | 196 | } |
| 196 | else { | 197 | else { |
| 197 | this->stat_decompr_blocks++; | 198 | this->stat_decompr_blocks++; |
| 198 | } | 199 | } |
| 199 | this->usecount--; | 200 | this->usecount--; |
| 200 | spin_unlock(&jffs2_compressor_list_lock); | 201 | spin_unlock(&jffs2_compressor_list_lock); |
| 201 | return ret; | 202 | return ret; |
| 202 | } | 203 | } |
| 203 | } | 204 | } |
| 204 | printk(KERN_WARNING "JFFS2 compression type 0x%02x not available.\n", comprtype); | 205 | printk(KERN_WARNING "JFFS2 compression type 0x%02x not available.\n", comprtype); |
| 205 | spin_unlock(&jffs2_compressor_list_lock); | 206 | spin_unlock(&jffs2_compressor_list_lock); |
| 206 | return -EIO; | 207 | return -EIO; |
| 207 | } | 208 | } |
| 208 | return 0; | 209 | return 0; |
| @@ -210,108 +211,108 @@ int jffs2_decompress(struct jffs2_sb_info *c, struct jffs2_inode_info *f, | |||
| 210 | 211 | ||
| 211 | int jffs2_register_compressor(struct jffs2_compressor *comp) | 212 | int jffs2_register_compressor(struct jffs2_compressor *comp) |
| 212 | { | 213 | { |
| 213 | struct jffs2_compressor *this; | 214 | struct jffs2_compressor *this; |
| 214 | 215 | ||
| 215 | if (!comp->name) { | 216 | if (!comp->name) { |
| 216 | printk(KERN_WARNING "NULL compressor name at registering JFFS2 compressor. Failed.\n"); | 217 | printk(KERN_WARNING "NULL compressor name at registering JFFS2 compressor. Failed.\n"); |
| 217 | return -1; | 218 | return -1; |
| 218 | } | 219 | } |
| 219 | comp->compr_buf_size=0; | 220 | comp->compr_buf_size=0; |
| 220 | comp->compr_buf=NULL; | 221 | comp->compr_buf=NULL; |
| 221 | comp->usecount=0; | 222 | comp->usecount=0; |
| 222 | comp->stat_compr_orig_size=0; | 223 | comp->stat_compr_orig_size=0; |
| 223 | comp->stat_compr_new_size=0; | 224 | comp->stat_compr_new_size=0; |
| 224 | comp->stat_compr_blocks=0; | 225 | comp->stat_compr_blocks=0; |
| 225 | comp->stat_decompr_blocks=0; | 226 | comp->stat_decompr_blocks=0; |
| 226 | D1(printk(KERN_DEBUG "Registering JFFS2 compressor \"%s\"\n", comp->name)); | 227 | D1(printk(KERN_DEBUG "Registering JFFS2 compressor \"%s\"\n", comp->name)); |
| 227 | 228 | ||
| 228 | spin_lock(&jffs2_compressor_list_lock); | 229 | spin_lock(&jffs2_compressor_list_lock); |
| 229 | 230 | ||
| 230 | list_for_each_entry(this, &jffs2_compressor_list, list) { | 231 | list_for_each_entry(this, &jffs2_compressor_list, list) { |
| 231 | if (this->priority < comp->priority) { | 232 | if (this->priority < comp->priority) { |
| 232 | list_add(&comp->list, this->list.prev); | 233 | list_add(&comp->list, this->list.prev); |
| 233 | goto out; | 234 | goto out; |
| 234 | } | 235 | } |
| 235 | } | 236 | } |
| 236 | list_add_tail(&comp->list, &jffs2_compressor_list); | 237 | list_add_tail(&comp->list, &jffs2_compressor_list); |
| 237 | out: | 238 | out: |
| 238 | D2(list_for_each_entry(this, &jffs2_compressor_list, list) { | 239 | D2(list_for_each_entry(this, &jffs2_compressor_list, list) { |
| 239 | printk(KERN_DEBUG "Compressor \"%s\", prio %d\n", this->name, this->priority); | 240 | printk(KERN_DEBUG "Compressor \"%s\", prio %d\n", this->name, this->priority); |
| 240 | }) | 241 | }) |
| 241 | 242 | ||
| 242 | spin_unlock(&jffs2_compressor_list_lock); | 243 | spin_unlock(&jffs2_compressor_list_lock); |
| 243 | 244 | ||
| 244 | return 0; | 245 | return 0; |
| 245 | } | 246 | } |
| 246 | 247 | ||
| 247 | int jffs2_unregister_compressor(struct jffs2_compressor *comp) | 248 | int jffs2_unregister_compressor(struct jffs2_compressor *comp) |
| 248 | { | 249 | { |
| 249 | D2(struct jffs2_compressor *this;) | 250 | D2(struct jffs2_compressor *this;) |
| 250 | 251 | ||
| 251 | D1(printk(KERN_DEBUG "Unregistering JFFS2 compressor \"%s\"\n", comp->name)); | 252 | D1(printk(KERN_DEBUG "Unregistering JFFS2 compressor \"%s\"\n", comp->name)); |
| 252 | 253 | ||
| 253 | spin_lock(&jffs2_compressor_list_lock); | 254 | spin_lock(&jffs2_compressor_list_lock); |
| 254 | 255 | ||
| 255 | if (comp->usecount) { | 256 | if (comp->usecount) { |
| 256 | spin_unlock(&jffs2_compressor_list_lock); | 257 | spin_unlock(&jffs2_compressor_list_lock); |
| 257 | printk(KERN_WARNING "JFFS2: Compressor modul is in use. Unregister failed.\n"); | 258 | printk(KERN_WARNING "JFFS2: Compressor modul is in use. Unregister failed.\n"); |
| 258 | return -1; | 259 | return -1; |
| 259 | } | 260 | } |
| 260 | list_del(&comp->list); | 261 | list_del(&comp->list); |
| 261 | 262 | ||
| 262 | D2(list_for_each_entry(this, &jffs2_compressor_list, list) { | 263 | D2(list_for_each_entry(this, &jffs2_compressor_list, list) { |
| 263 | printk(KERN_DEBUG "Compressor \"%s\", prio %d\n", this->name, this->priority); | 264 | printk(KERN_DEBUG "Compressor \"%s\", prio %d\n", this->name, this->priority); |
| 264 | }) | 265 | }) |
| 265 | spin_unlock(&jffs2_compressor_list_lock); | 266 | spin_unlock(&jffs2_compressor_list_lock); |
| 266 | return 0; | 267 | return 0; |
| 267 | } | 268 | } |
| 268 | 269 | ||
| 269 | void jffs2_free_comprbuf(unsigned char *comprbuf, unsigned char *orig) | 270 | void jffs2_free_comprbuf(unsigned char *comprbuf, unsigned char *orig) |
| 270 | { | 271 | { |
| 271 | if (orig != comprbuf) | 272 | if (orig != comprbuf) |
| 272 | kfree(comprbuf); | 273 | kfree(comprbuf); |
| 273 | } | 274 | } |
| 274 | 275 | ||
| 275 | int __init jffs2_compressors_init(void) | 276 | int __init jffs2_compressors_init(void) |
| 276 | { | 277 | { |
| 277 | /* Registering compressors */ | 278 | /* Registering compressors */ |
| 278 | #ifdef CONFIG_JFFS2_ZLIB | 279 | #ifdef CONFIG_JFFS2_ZLIB |
| 279 | jffs2_zlib_init(); | 280 | jffs2_zlib_init(); |
| 280 | #endif | 281 | #endif |
| 281 | #ifdef CONFIG_JFFS2_RTIME | 282 | #ifdef CONFIG_JFFS2_RTIME |
| 282 | jffs2_rtime_init(); | 283 | jffs2_rtime_init(); |
| 283 | #endif | 284 | #endif |
| 284 | #ifdef CONFIG_JFFS2_RUBIN | 285 | #ifdef CONFIG_JFFS2_RUBIN |
| 285 | jffs2_rubinmips_init(); | 286 | jffs2_rubinmips_init(); |
| 286 | jffs2_dynrubin_init(); | 287 | jffs2_dynrubin_init(); |
| 287 | #endif | 288 | #endif |
| 288 | /* Setting default compression mode */ | 289 | /* Setting default compression mode */ |
| 289 | #ifdef CONFIG_JFFS2_CMODE_NONE | 290 | #ifdef CONFIG_JFFS2_CMODE_NONE |
| 290 | jffs2_compression_mode = JFFS2_COMPR_MODE_NONE; | 291 | jffs2_compression_mode = JFFS2_COMPR_MODE_NONE; |
| 291 | D1(printk(KERN_INFO "JFFS2: default compression mode: none\n");) | 292 | D1(printk(KERN_INFO "JFFS2: default compression mode: none\n");) |
| 292 | #else | 293 | #else |
| 293 | #ifdef CONFIG_JFFS2_CMODE_SIZE | 294 | #ifdef CONFIG_JFFS2_CMODE_SIZE |
| 294 | jffs2_compression_mode = JFFS2_COMPR_MODE_SIZE; | 295 | jffs2_compression_mode = JFFS2_COMPR_MODE_SIZE; |
| 295 | D1(printk(KERN_INFO "JFFS2: default compression mode: size\n");) | 296 | D1(printk(KERN_INFO "JFFS2: default compression mode: size\n");) |
| 296 | #else | 297 | #else |
| 297 | D1(printk(KERN_INFO "JFFS2: default compression mode: priority\n");) | 298 | D1(printk(KERN_INFO "JFFS2: default compression mode: priority\n");) |
| 298 | #endif | 299 | #endif |
| 299 | #endif | 300 | #endif |
| 300 | return 0; | 301 | return 0; |
| 301 | } | 302 | } |
| 302 | 303 | ||
| 303 | int jffs2_compressors_exit(void) | 304 | int jffs2_compressors_exit(void) |
| 304 | { | 305 | { |
| 305 | /* Unregistering compressors */ | 306 | /* Unregistering compressors */ |
| 306 | #ifdef CONFIG_JFFS2_RUBIN | 307 | #ifdef CONFIG_JFFS2_RUBIN |
| 307 | jffs2_dynrubin_exit(); | 308 | jffs2_dynrubin_exit(); |
| 308 | jffs2_rubinmips_exit(); | 309 | jffs2_rubinmips_exit(); |
| 309 | #endif | 310 | #endif |
| 310 | #ifdef CONFIG_JFFS2_RTIME | 311 | #ifdef CONFIG_JFFS2_RTIME |
| 311 | jffs2_rtime_exit(); | 312 | jffs2_rtime_exit(); |
| 312 | #endif | 313 | #endif |
| 313 | #ifdef CONFIG_JFFS2_ZLIB | 314 | #ifdef CONFIG_JFFS2_ZLIB |
| 314 | jffs2_zlib_exit(); | 315 | jffs2_zlib_exit(); |
| 315 | #endif | 316 | #endif |
| 316 | return 0; | 317 | return 0; |
| 317 | } | 318 | } |
diff --git a/fs/jffs2/compr.h b/fs/jffs2/compr.h index 68cc7010dbdf..1070275da58f 100644 --- a/fs/jffs2/compr.h +++ b/fs/jffs2/compr.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * JFFS2 -- Journalling Flash File System, Version 2. | 2 | * JFFS2 -- Journalling Flash File System, Version 2. |
| 3 | * | 3 | * |
| 4 | * Copyright © 2004 Ferenc Havasi <havasi@inf.u-szeged.hu>, | 4 | * Copyright © 2004 Ferenc Havasi <havasi@inf.u-szeged.hu>, |
| 5 | * University of Szeged, Hungary | 5 | * University of Szeged, Hungary |
| 6 | * | 6 | * |
| 7 | * For licensing information, see the file 'LICENCE' in this directory. | 7 | * For licensing information, see the file 'LICENCE' in this directory. |
| 8 | * | 8 | * |
| @@ -32,29 +32,29 @@ | |||
| 32 | #define JFFS2_ZLIB_PRIORITY 60 | 32 | #define JFFS2_ZLIB_PRIORITY 60 |
| 33 | 33 | ||
| 34 | #define JFFS2_RUBINMIPS_DISABLED /* RUBINs will be used only */ | 34 | #define JFFS2_RUBINMIPS_DISABLED /* RUBINs will be used only */ |
| 35 | #define JFFS2_DYNRUBIN_DISABLED /* for decompression */ | 35 | #define JFFS2_DYNRUBIN_DISABLED /* for decompression */ |
| 36 | 36 | ||
| 37 | #define JFFS2_COMPR_MODE_NONE 0 | 37 | #define JFFS2_COMPR_MODE_NONE 0 |
| 38 | #define JFFS2_COMPR_MODE_PRIORITY 1 | 38 | #define JFFS2_COMPR_MODE_PRIORITY 1 |
| 39 | #define JFFS2_COMPR_MODE_SIZE 2 | 39 | #define JFFS2_COMPR_MODE_SIZE 2 |
| 40 | 40 | ||
| 41 | struct jffs2_compressor { | 41 | struct jffs2_compressor { |
| 42 | struct list_head list; | 42 | struct list_head list; |
| 43 | int priority; /* used by prirority comr. mode */ | 43 | int priority; /* used by prirority comr. mode */ |
| 44 | char *name; | 44 | char *name; |
| 45 | char compr; /* JFFS2_COMPR_XXX */ | 45 | char compr; /* JFFS2_COMPR_XXX */ |
| 46 | int (*compress)(unsigned char *data_in, unsigned char *cpage_out, | 46 | int (*compress)(unsigned char *data_in, unsigned char *cpage_out, |
| 47 | uint32_t *srclen, uint32_t *destlen, void *model); | 47 | uint32_t *srclen, uint32_t *destlen, void *model); |
| 48 | int (*decompress)(unsigned char *cdata_in, unsigned char *data_out, | 48 | int (*decompress)(unsigned char *cdata_in, unsigned char *data_out, |
| 49 | uint32_t cdatalen, uint32_t datalen, void *model); | 49 | uint32_t cdatalen, uint32_t datalen, void *model); |
| 50 | int usecount; | 50 | int usecount; |
| 51 | int disabled; /* if seted the compressor won't compress */ | 51 | int disabled; /* if set the compressor won't compress */ |
| 52 | unsigned char *compr_buf; /* used by size compr. mode */ | 52 | unsigned char *compr_buf; /* used by size compr. mode */ |
| 53 | uint32_t compr_buf_size; /* used by size compr. mode */ | 53 | uint32_t compr_buf_size; /* used by size compr. mode */ |
| 54 | uint32_t stat_compr_orig_size; | 54 | uint32_t stat_compr_orig_size; |
| 55 | uint32_t stat_compr_new_size; | 55 | uint32_t stat_compr_new_size; |
| 56 | uint32_t stat_compr_blocks; | 56 | uint32_t stat_compr_blocks; |
| 57 | uint32_t stat_decompr_blocks; | 57 | uint32_t stat_decompr_blocks; |
| 58 | }; | 58 | }; |
| 59 | 59 | ||
| 60 | int jffs2_register_compressor(struct jffs2_compressor *comp); | 60 | int jffs2_register_compressor(struct jffs2_compressor *comp); |
| @@ -64,12 +64,12 @@ int jffs2_compressors_init(void); | |||
| 64 | int jffs2_compressors_exit(void); | 64 | int jffs2_compressors_exit(void); |
| 65 | 65 | ||
| 66 | uint16_t jffs2_compress(struct jffs2_sb_info *c, struct jffs2_inode_info *f, | 66 | uint16_t jffs2_compress(struct jffs2_sb_info *c, struct jffs2_inode_info *f, |
| 67 | unsigned char *data_in, unsigned char **cpage_out, | 67 | unsigned char *data_in, unsigned char **cpage_out, |
| 68 | uint32_t *datalen, uint32_t *cdatalen); | 68 | uint32_t *datalen, uint32_t *cdatalen); |
| 69 | 69 | ||
| 70 | int jffs2_decompress(struct jffs2_sb_info *c, struct jffs2_inode_info *f, | 70 | int jffs2_decompress(struct jffs2_sb_info *c, struct jffs2_inode_info *f, |
| 71 | uint16_t comprtype, unsigned char *cdata_in, | 71 | uint16_t comprtype, unsigned char *cdata_in, |
| 72 | unsigned char *data_out, uint32_t cdatalen, uint32_t datalen); | 72 | unsigned char *data_out, uint32_t cdatalen, uint32_t datalen); |
| 73 | 73 | ||
| 74 | void jffs2_free_comprbuf(unsigned char *comprbuf, unsigned char *orig); | 74 | void jffs2_free_comprbuf(unsigned char *comprbuf, unsigned char *orig); |
| 75 | 75 | ||
diff --git a/fs/jffs2/compr_rtime.c b/fs/jffs2/compr_rtime.c index 0d0bfd2e4e0d..546d1538d076 100644 --- a/fs/jffs2/compr_rtime.c +++ b/fs/jffs2/compr_rtime.c | |||
| @@ -104,7 +104,7 @@ static int jffs2_rtime_decompress(unsigned char *data_in, | |||
| 104 | } | 104 | } |
| 105 | } | 105 | } |
| 106 | } | 106 | } |
| 107 | return 0; | 107 | return 0; |
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | static struct jffs2_compressor jffs2_rtime_comp = { | 110 | static struct jffs2_compressor jffs2_rtime_comp = { |
diff --git a/fs/jffs2/compr_rubin.c b/fs/jffs2/compr_rubin.c index ea0431e047d5..c73fa89b5f8a 100644 --- a/fs/jffs2/compr_rubin.c +++ b/fs/jffs2/compr_rubin.c | |||
| @@ -384,7 +384,7 @@ static int jffs2_rubinmips_decompress(unsigned char *data_in, | |||
| 384 | void *model) | 384 | void *model) |
| 385 | { | 385 | { |
| 386 | rubin_do_decompress(BIT_DIVIDER_MIPS, bits_mips, data_in, cpage_out, sourcelen, dstlen); | 386 | rubin_do_decompress(BIT_DIVIDER_MIPS, bits_mips, data_in, cpage_out, sourcelen, dstlen); |
| 387 | return 0; | 387 | return 0; |
| 388 | } | 388 | } |
| 389 | 389 | ||
| 390 | static int jffs2_dynrubin_decompress(unsigned char *data_in, | 390 | static int jffs2_dynrubin_decompress(unsigned char *data_in, |
| @@ -399,7 +399,7 @@ static int jffs2_dynrubin_decompress(unsigned char *data_in, | |||
| 399 | bits[c] = data_in[c]; | 399 | bits[c] = data_in[c]; |
| 400 | 400 | ||
| 401 | rubin_do_decompress(256, bits, data_in+8, cpage_out, sourcelen-8, dstlen); | 401 | rubin_do_decompress(256, bits, data_in+8, cpage_out, sourcelen-8, dstlen); |
| 402 | return 0; | 402 | return 0; |
| 403 | } | 403 | } |
| 404 | 404 | ||
| 405 | static struct jffs2_compressor jffs2_rubinmips_comp = { | 405 | static struct jffs2_compressor jffs2_rubinmips_comp = { |
diff --git a/fs/jffs2/compr_zlib.c b/fs/jffs2/compr_zlib.c index 2b87fccc1557..cfd301a5edfc 100644 --- a/fs/jffs2/compr_zlib.c +++ b/fs/jffs2/compr_zlib.c | |||
| @@ -181,7 +181,7 @@ static int jffs2_zlib_decompress(unsigned char *data_in, | |||
| 181 | } | 181 | } |
| 182 | zlib_inflateEnd(&inf_strm); | 182 | zlib_inflateEnd(&inf_strm); |
| 183 | mutex_unlock(&inflate_mutex); | 183 | mutex_unlock(&inflate_mutex); |
| 184 | return 0; | 184 | return 0; |
| 185 | } | 185 | } |
| 186 | 186 | ||
| 187 | static struct jffs2_compressor jffs2_zlib_comp = { | 187 | static struct jffs2_compressor jffs2_zlib_comp = { |
| @@ -203,11 +203,11 @@ int __init jffs2_zlib_init(void) | |||
| 203 | 203 | ||
| 204 | ret = alloc_workspaces(); | 204 | ret = alloc_workspaces(); |
| 205 | if (ret) | 205 | if (ret) |
| 206 | return ret; | 206 | return ret; |
| 207 | 207 | ||
| 208 | ret = jffs2_register_compressor(&jffs2_zlib_comp); | 208 | ret = jffs2_register_compressor(&jffs2_zlib_comp); |
| 209 | if (ret) | 209 | if (ret) |
| 210 | free_workspaces(); | 210 | free_workspaces(); |
| 211 | 211 | ||
| 212 | return ret; | 212 | return ret; |
| 213 | } | 213 | } |
diff --git a/fs/jffs2/dir.c b/fs/jffs2/dir.c index c1dfca310dd6..d293a1fad6d6 100644 --- a/fs/jffs2/dir.c +++ b/fs/jffs2/dir.c | |||
| @@ -32,7 +32,7 @@ static int jffs2_mkdir (struct inode *,struct dentry *,int); | |||
| 32 | static int jffs2_rmdir (struct inode *,struct dentry *); | 32 | static int jffs2_rmdir (struct inode *,struct dentry *); |
| 33 | static int jffs2_mknod (struct inode *,struct dentry *,int,dev_t); | 33 | static int jffs2_mknod (struct inode *,struct dentry *,int,dev_t); |
| 34 | static int jffs2_rename (struct inode *, struct dentry *, | 34 | static int jffs2_rename (struct inode *, struct dentry *, |
| 35 | struct inode *, struct dentry *); | 35 | struct inode *, struct dentry *); |
| 36 | 36 | ||
| 37 | const struct file_operations jffs2_dir_operations = | 37 | const struct file_operations jffs2_dir_operations = |
| 38 | { | 38 | { |
| @@ -770,7 +770,7 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de | |||
| 770 | } | 770 | } |
| 771 | 771 | ||
| 772 | static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry, | 772 | static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry, |
| 773 | struct inode *new_dir_i, struct dentry *new_dentry) | 773 | struct inode *new_dir_i, struct dentry *new_dentry) |
| 774 | { | 774 | { |
| 775 | int ret; | 775 | int ret; |
| 776 | struct jffs2_sb_info *c = JFFS2_SB_INFO(old_dir_i->i_sb); | 776 | struct jffs2_sb_info *c = JFFS2_SB_INFO(old_dir_i->i_sb); |
diff --git a/fs/jffs2/erase.c b/fs/jffs2/erase.c index f81148ae3101..efd83f33a806 100644 --- a/fs/jffs2/erase.c +++ b/fs/jffs2/erase.c | |||
| @@ -38,8 +38,8 @@ static void jffs2_erase_block(struct jffs2_sb_info *c, | |||
| 38 | #ifdef __ECOS | 38 | #ifdef __ECOS |
| 39 | ret = jffs2_flash_erase(c, jeb); | 39 | ret = jffs2_flash_erase(c, jeb); |
| 40 | if (!ret) { | 40 | if (!ret) { |
| 41 | jffs2_erase_succeeded(c, jeb); | 41 | jffs2_erase_succeeded(c, jeb); |
| 42 | return; | 42 | return; |
| 43 | } | 43 | } |
| 44 | bad_offset = jeb->offset; | 44 | bad_offset = jeb->offset; |
| 45 | #else /* Linux */ | 45 | #else /* Linux */ |
diff --git a/fs/jffs2/gc.c b/fs/jffs2/gc.c index 2d99e06ab223..eded819df235 100644 --- a/fs/jffs2/gc.c +++ b/fs/jffs2/gc.c | |||
| @@ -556,7 +556,7 @@ static int jffs2_garbage_collect_pristine(struct jffs2_sb_info *c, | |||
| 556 | 556 | ||
| 557 | node = kmalloc(rawlen, GFP_KERNEL); | 557 | node = kmalloc(rawlen, GFP_KERNEL); |
| 558 | if (!node) | 558 | if (!node) |
| 559 | return -ENOMEM; | 559 | return -ENOMEM; |
| 560 | 560 | ||
| 561 | ret = jffs2_flash_read(c, ref_offset(raw), rawlen, &retlen, (char *)node); | 561 | ret = jffs2_flash_read(c, ref_offset(raw), rawlen, &retlen, (char *)node); |
| 562 | if (!ret && retlen != rawlen) | 562 | if (!ret && retlen != rawlen) |
| @@ -624,7 +624,7 @@ static int jffs2_garbage_collect_pristine(struct jffs2_sb_info *c, | |||
| 624 | 624 | ||
| 625 | if (ret || (retlen != rawlen)) { | 625 | if (ret || (retlen != rawlen)) { |
| 626 | printk(KERN_NOTICE "Write of %d bytes at 0x%08x failed. returned %d, retlen %zd\n", | 626 | printk(KERN_NOTICE "Write of %d bytes at 0x%08x failed. returned %d, retlen %zd\n", |
| 627 | rawlen, phys_ofs, ret, retlen); | 627 | rawlen, phys_ofs, ret, retlen); |
| 628 | if (retlen) { | 628 | if (retlen) { |
| 629 | jffs2_add_physical_node_ref(c, phys_ofs | REF_OBSOLETE, rawlen, NULL); | 629 | jffs2_add_physical_node_ref(c, phys_ofs | REF_OBSOLETE, rawlen, NULL); |
| 630 | } else { | 630 | } else { |
diff --git a/fs/jffs2/nodelist.h b/fs/jffs2/nodelist.h index bc5509fe577b..ec1aae9e695e 100644 --- a/fs/jffs2/nodelist.h +++ b/fs/jffs2/nodelist.h | |||
| @@ -127,7 +127,7 @@ static inline struct jffs2_inode_cache *jffs2_raw_ref_to_ic(struct jffs2_raw_nod | |||
| 127 | return ((struct jffs2_inode_cache *)raw); | 127 | return ((struct jffs2_inode_cache *)raw); |
| 128 | } | 128 | } |
| 129 | 129 | ||
| 130 | /* flash_offset & 3 always has to be zero, because nodes are | 130 | /* flash_offset & 3 always has to be zero, because nodes are |
| 131 | always aligned at 4 bytes. So we have a couple of extra bits | 131 | always aligned at 4 bytes. So we have a couple of extra bits |
| 132 | to play with, which indicate the node's status; see below: */ | 132 | to play with, which indicate the node's status; see below: */ |
| 133 | #define REF_UNCHECKED 0 /* We haven't yet checked the CRC or built its inode */ | 133 | #define REF_UNCHECKED 0 /* We haven't yet checked the CRC or built its inode */ |
diff --git a/fs/jffs2/nodemgmt.c b/fs/jffs2/nodemgmt.c index 9c3a3bba6dcf..5b49bff364b4 100644 --- a/fs/jffs2/nodemgmt.c +++ b/fs/jffs2/nodemgmt.c | |||
| @@ -154,7 +154,7 @@ int jffs2_reserve_space_gc(struct jffs2_sb_info *c, uint32_t minsize, | |||
| 154 | while(ret == -EAGAIN) { | 154 | while(ret == -EAGAIN) { |
| 155 | ret = jffs2_do_reserve_space(c, minsize, len, sumsize); | 155 | ret = jffs2_do_reserve_space(c, minsize, len, sumsize); |
| 156 | if (ret) { | 156 | if (ret) { |
| 157 | D1(printk(KERN_DEBUG "jffs2_reserve_space_gc: looping, ret is %d\n", ret)); | 157 | D1(printk(KERN_DEBUG "jffs2_reserve_space_gc: looping, ret is %d\n", ret)); |
| 158 | } | 158 | } |
| 159 | } | 159 | } |
| 160 | spin_unlock(&c->erase_completion_lock); | 160 | spin_unlock(&c->erase_completion_lock); |
diff --git a/fs/jffs2/readinode.c b/fs/jffs2/readinode.c index b5baa356fed2..8d4319c56b17 100644 --- a/fs/jffs2/readinode.c +++ b/fs/jffs2/readinode.c | |||
| @@ -211,7 +211,7 @@ static void jffs2_kill_tn(struct jffs2_sb_info *c, struct jffs2_tmp_dnode_info * | |||
| 211 | * ordering. | 211 | * ordering. |
| 212 | * | 212 | * |
| 213 | * Returns 0 if the node was handled (including marking it obsolete) | 213 | * Returns 0 if the node was handled (including marking it obsolete) |
| 214 | * < 0 an if error occurred | 214 | * < 0 an if error occurred |
| 215 | */ | 215 | */ |
| 216 | static int jffs2_add_tn_to_tree(struct jffs2_sb_info *c, | 216 | static int jffs2_add_tn_to_tree(struct jffs2_sb_info *c, |
| 217 | struct jffs2_readinode_info *rii, | 217 | struct jffs2_readinode_info *rii, |
| @@ -862,8 +862,8 @@ static inline int read_unknown(struct jffs2_sb_info *c, struct jffs2_raw_node_re | |||
| 862 | JFFS2_ERROR("REF_UNCHECKED but unknown node at %#08x\n", | 862 | JFFS2_ERROR("REF_UNCHECKED but unknown node at %#08x\n", |
| 863 | ref_offset(ref)); | 863 | ref_offset(ref)); |
| 864 | JFFS2_ERROR("Node is {%04x,%04x,%08x,%08x}. Please report this error.\n", | 864 | JFFS2_ERROR("Node is {%04x,%04x,%08x,%08x}. Please report this error.\n", |
| 865 | je16_to_cpu(un->magic), je16_to_cpu(un->nodetype), | 865 | je16_to_cpu(un->magic), je16_to_cpu(un->nodetype), |
| 866 | je32_to_cpu(un->totlen), je32_to_cpu(un->hdr_crc)); | 866 | je32_to_cpu(un->totlen), je32_to_cpu(un->hdr_crc)); |
| 867 | jffs2_mark_node_obsolete(c, ref); | 867 | jffs2_mark_node_obsolete(c, ref); |
| 868 | return 0; | 868 | return 0; |
| 869 | } | 869 | } |
diff --git a/fs/jffs2/scan.c b/fs/jffs2/scan.c index 6c75cd433342..59dd408e5432 100644 --- a/fs/jffs2/scan.c +++ b/fs/jffs2/scan.c | |||
| @@ -863,7 +863,7 @@ scan_more: | |||
| 863 | switch (je16_to_cpu(node->nodetype) & JFFS2_COMPAT_MASK) { | 863 | switch (je16_to_cpu(node->nodetype) & JFFS2_COMPAT_MASK) { |
| 864 | case JFFS2_FEATURE_ROCOMPAT: | 864 | case JFFS2_FEATURE_ROCOMPAT: |
| 865 | printk(KERN_NOTICE "Read-only compatible feature node (0x%04x) found at offset 0x%08x\n", je16_to_cpu(node->nodetype), ofs); | 865 | printk(KERN_NOTICE "Read-only compatible feature node (0x%04x) found at offset 0x%08x\n", je16_to_cpu(node->nodetype), ofs); |
| 866 | c->flags |= JFFS2_SB_FLAG_RO; | 866 | c->flags |= JFFS2_SB_FLAG_RO; |
| 867 | if (!(jffs2_is_readonly(c))) | 867 | if (!(jffs2_is_readonly(c))) |
| 868 | return -EROFS; | 868 | return -EROFS; |
| 869 | if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(node->totlen))))) | 869 | if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(node->totlen))))) |
diff --git a/fs/jffs2/security.c b/fs/jffs2/security.c index bc9f6ba10823..02c39c64ecb3 100644 --- a/fs/jffs2/security.c +++ b/fs/jffs2/security.c | |||
| @@ -38,9 +38,9 @@ int jffs2_init_security(struct inode *inode, struct inode *dir) | |||
| 38 | } | 38 | } |
| 39 | rc = do_jffs2_setxattr(inode, JFFS2_XPREFIX_SECURITY, name, value, len, 0); | 39 | rc = do_jffs2_setxattr(inode, JFFS2_XPREFIX_SECURITY, name, value, len, 0); |
| 40 | 40 | ||
| 41 | kfree(name); | 41 | kfree(name); |
| 42 | kfree(value); | 42 | kfree(value); |
| 43 | return rc; | 43 | return rc; |
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | /* ---- XATTR Handler for "security.*" ----------------- */ | 46 | /* ---- XATTR Handler for "security.*" ----------------- */ |
diff --git a/fs/jffs2/summary.c b/fs/jffs2/summary.c index d828b296392a..2a77d3f93029 100644 --- a/fs/jffs2/summary.c +++ b/fs/jffs2/summary.c | |||
| @@ -2,10 +2,10 @@ | |||
| 2 | * JFFS2 -- Journalling Flash File System, Version 2. | 2 | * JFFS2 -- Journalling Flash File System, Version 2. |
| 3 | * | 3 | * |
| 4 | * Copyright © 2004 Ferenc Havasi <havasi@inf.u-szeged.hu>, | 4 | * Copyright © 2004 Ferenc Havasi <havasi@inf.u-szeged.hu>, |
| 5 | * Zoltan Sogor <weth@inf.u-szeged.hu>, | 5 | * Zoltan Sogor <weth@inf.u-szeged.hu>, |
| 6 | * Patrik Kluba <pajko@halom.u-szeged.hu>, | 6 | * Patrik Kluba <pajko@halom.u-szeged.hu>, |
| 7 | * University of Szeged, Hungary | 7 | * University of Szeged, Hungary |
| 8 | * 2006 KaiGai Kohei <kaigai@ak.jp.nec.com> | 8 | * 2006 KaiGai Kohei <kaigai@ak.jp.nec.com> |
| 9 | * | 9 | * |
| 10 | * For licensing information, see the file 'LICENCE' in this directory. | 10 | * For licensing information, see the file 'LICENCE' in this directory. |
| 11 | * | 11 | * |
diff --git a/fs/jffs2/summary.h b/fs/jffs2/summary.h index 0c6669e21390..8bf34f2fa5ce 100644 --- a/fs/jffs2/summary.h +++ b/fs/jffs2/summary.h | |||
| @@ -2,9 +2,9 @@ | |||
| 2 | * JFFS2 -- Journalling Flash File System, Version 2. | 2 | * JFFS2 -- Journalling Flash File System, Version 2. |
| 3 | * | 3 | * |
| 4 | * Copyright © 2004 Ferenc Havasi <havasi@inf.u-szeged.hu>, | 4 | * Copyright © 2004 Ferenc Havasi <havasi@inf.u-szeged.hu>, |
| 5 | * Zoltan Sogor <weth@inf.u-szeged.hu>, | 5 | * Zoltan Sogor <weth@inf.u-szeged.hu>, |
| 6 | * Patrik Kluba <pajko@halom.u-szeged.hu>, | 6 | * Patrik Kluba <pajko@halom.u-szeged.hu>, |
| 7 | * University of Szeged, Hungary | 7 | * University of Szeged, Hungary |
| 8 | * | 8 | * |
| 9 | * For licensing information, see the file 'LICENCE' in this directory. | 9 | * For licensing information, see the file 'LICENCE' in this directory. |
| 10 | * | 10 | * |
diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c index 91d1d0f1c66c..64f8d7add7e8 100644 --- a/fs/jffs2/wbuf.c +++ b/fs/jffs2/wbuf.c | |||
| @@ -1021,8 +1021,8 @@ int jffs2_check_oob_empty(struct jffs2_sb_info *c, | |||
| 1021 | /* | 1021 | /* |
| 1022 | * Check for a valid cleanmarker. | 1022 | * Check for a valid cleanmarker. |
| 1023 | * Returns: 0 if a valid cleanmarker was found | 1023 | * Returns: 0 if a valid cleanmarker was found |
| 1024 | * 1 if no cleanmarker was found | 1024 | * 1 if no cleanmarker was found |
| 1025 | * negative error code if an error occurred | 1025 | * negative error code if an error occurred |
| 1026 | */ | 1026 | */ |
| 1027 | int jffs2_check_nand_cleanmarker(struct jffs2_sb_info *c, | 1027 | int jffs2_check_nand_cleanmarker(struct jffs2_sb_info *c, |
| 1028 | struct jffs2_eraseblock *jeb) | 1028 | struct jffs2_eraseblock *jeb) |
diff --git a/fs/jffs2/xattr.h b/fs/jffs2/xattr.h index 3b0ff2925937..6e3b5ddfb7ab 100644 --- a/fs/jffs2/xattr.h +++ b/fs/jffs2/xattr.h | |||
| @@ -75,7 +75,7 @@ extern void jffs2_build_xattr_subsystem(struct jffs2_sb_info *c); | |||
| 75 | extern void jffs2_clear_xattr_subsystem(struct jffs2_sb_info *c); | 75 | extern void jffs2_clear_xattr_subsystem(struct jffs2_sb_info *c); |
| 76 | 76 | ||
| 77 | extern struct jffs2_xattr_datum *jffs2_setup_xattr_datum(struct jffs2_sb_info *c, | 77 | extern struct jffs2_xattr_datum *jffs2_setup_xattr_datum(struct jffs2_sb_info *c, |
| 78 | uint32_t xid, uint32_t version); | 78 | uint32_t xid, uint32_t version); |
| 79 | 79 | ||
| 80 | extern void jffs2_xattr_delete_inode(struct jffs2_sb_info *c, struct jffs2_inode_cache *ic); | 80 | extern void jffs2_xattr_delete_inode(struct jffs2_sb_info *c, struct jffs2_inode_cache *ic); |
| 81 | extern void jffs2_xattr_free_inode(struct jffs2_sb_info *c, struct jffs2_inode_cache *ic); | 81 | extern void jffs2_xattr_free_inode(struct jffs2_sb_info *c, struct jffs2_inode_cache *ic); |
diff --git a/fs/jffs2/xattr_user.c b/fs/jffs2/xattr_user.c index 40942bc516bb..8bbeab90ada1 100644 --- a/fs/jffs2/xattr_user.c +++ b/fs/jffs2/xattr_user.c | |||
| @@ -17,7 +17,7 @@ | |||
| 17 | #include "nodelist.h" | 17 | #include "nodelist.h" |
| 18 | 18 | ||
| 19 | static int jffs2_user_getxattr(struct inode *inode, const char *name, | 19 | static int jffs2_user_getxattr(struct inode *inode, const char *name, |
| 20 | void *buffer, size_t size) | 20 | void *buffer, size_t size) |
| 21 | { | 21 | { |
| 22 | if (!strcmp(name, "")) | 22 | if (!strcmp(name, "")) |
| 23 | return -EINVAL; | 23 | return -EINVAL; |
| @@ -25,7 +25,7 @@ static int jffs2_user_getxattr(struct inode *inode, const char *name, | |||
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | static int jffs2_user_setxattr(struct inode *inode, const char *name, const void *buffer, | 27 | static int jffs2_user_setxattr(struct inode *inode, const char *name, const void *buffer, |
| 28 | size_t size, int flags) | 28 | size_t size, int flags) |
| 29 | { | 29 | { |
| 30 | if (!strcmp(name, "")) | 30 | if (!strcmp(name, "")) |
| 31 | return -EINVAL; | 31 | return -EINVAL; |
