aboutsummaryrefslogtreecommitdiffstats
path: root/fs/jffs2/build.c
diff options
context:
space:
mode:
authorFerenc Havasi <havasi@inf.u-szeged.hu>2005-09-07 04:35:26 -0400
committerThomas Gleixner <tglx@mtd.linutronix.de>2005-11-06 15:29:48 -0500
commite631ddba588783edd521c5a89f7b2902772fb691 (patch)
treee25f322ee498b344f058ce4a40060baa22a5f105 /fs/jffs2/build.c
parent15017876751e4c2d786ba95920618359fe2b4f0a (diff)
[JFFS2] Add erase block summary support (mount time improvement)
The goal of summary is to speed up the mount time. Erase block summary (EBS) stores summary information at the end of every (closed) erase block. It is no longer necessary to scan all nodes separetly (and read all pages of them) just read this "small" summary, where every information is stored which is needed at mount time. This summary information is stored in a JFFS2_FEATURE_RWCOMPAT_DELETE. During the mount process if there is no summary info the orignal scan process will be executed. EBS works with NAND and NOR flashes, too. There is a user space tool called sumtool to generate this summary information for a JFFS2 image. Signed-off-by: Ferenc Havasi <havasi@inf.u-szeged.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'fs/jffs2/build.c')
-rw-r--r--fs/jffs2/build.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/fs/jffs2/build.c b/fs/jffs2/build.c
index 1522eace932e..f4a47a3b2a01 100644
--- a/fs/jffs2/build.c
+++ b/fs/jffs2/build.c
@@ -7,7 +7,7 @@
7 * 7 *
8 * For licensing information, see the file 'LICENCE' in this directory. 8 * For licensing information, see the file 'LICENCE' in this directory.
9 * 9 *
10 * $Id: build.c,v 1.77 2005/08/31 13:51:00 havasi Exp $ 10 * $Id: build.c,v 1.78 2005/09/07 08:34:54 havasi Exp $
11 * 11 *
12 */ 12 */
13 13
@@ -350,6 +350,10 @@ int jffs2_do_mount_fs(struct jffs2_sb_info *c)
350 INIT_LIST_HEAD(&c->bad_list); 350 INIT_LIST_HEAD(&c->bad_list);
351 INIT_LIST_HEAD(&c->bad_used_list); 351 INIT_LIST_HEAD(&c->bad_used_list);
352 c->highest_ino = 1; 352 c->highest_ino = 1;
353 c->summary = NULL;
354
355 if (jffs2_sum_init(c))
356 return -ENOMEM;
353 357
354 if (jffs2_build_filesystem(c)) { 358 if (jffs2_build_filesystem(c)) {
355 D1(printk(KERN_DEBUG "build_fs failed\n")); 359 D1(printk(KERN_DEBUG "build_fs failed\n"));
@@ -357,11 +361,11 @@ int jffs2_do_mount_fs(struct jffs2_sb_info *c)
357 jffs2_free_raw_node_refs(c); 361 jffs2_free_raw_node_refs(c);
358#ifndef __ECOS 362#ifndef __ECOS
359 if (jffs2_blocks_use_vmalloc(c)) 363 if (jffs2_blocks_use_vmalloc(c))
360 vfree(c->blocks); 364 vfree(c->blocks);
361 else 365 else
362#endif 366#endif
363 kfree(c->blocks); 367 kfree(c->blocks);
364 368
365 return -EIO; 369 return -EIO;
366 } 370 }
367 371