diff options
author | David Woodhouse <dwmw2@infradead.org> | 2006-05-30 09:00:14 +0100 |
---|---|---|
committer | David Woodhouse <dwmw2@infradead.org> | 2006-05-30 09:00:14 +0100 |
commit | 098a19811b483f8e047d8292641c88e776452de0 (patch) | |
tree | fc12a477f7f46aa7339d5e8ae86ed883ce79c90a /fs | |
parent | 13ba42df4a385d7b77d7aac32b93bdcd73e6d6e1 (diff) | |
download | linux-098a19811b483f8e047d8292641c88e776452de0.tar.bz2 |
[JFFS2] Preallocate node refs for cleanmarker in summary scan
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/jffs2/summary.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/fs/jffs2/summary.c b/fs/jffs2/summary.c index 00e856e4fdbe..51bf1654ce3b 100644 --- a/fs/jffs2/summary.c +++ b/fs/jffs2/summary.c @@ -564,7 +564,6 @@ int jffs2_sum_scan_sumnode(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb struct jffs2_unknown_node crcnode; int ret, ofs; uint32_t crc; - int err; ofs = c->sector_size - sumsize; @@ -606,16 +605,20 @@ int jffs2_sum_scan_sumnode(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb dbg_summary("Summary : CLEANMARKER node \n"); + ret = jffs2_prealloc_raw_node_refs(c, jeb, 1); + if (ret) + return ret; + if (je32_to_cpu(summary->cln_mkr) != c->cleanmarker_size) { dbg_summary("CLEANMARKER node has totlen 0x%x != normal 0x%x\n", je32_to_cpu(summary->cln_mkr), c->cleanmarker_size); - if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(summary->cln_mkr))))) - return err; + if ((ret = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(summary->cln_mkr))))) + return ret; } else if (jeb->first_node) { dbg_summary("CLEANMARKER node not first node in block " "(0x%08x)\n", jeb->offset); - if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(summary->cln_mkr))))) - return err; + if ((ret = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(summary->cln_mkr))))) + return ret; } else { jffs2_link_node_ref(c, jeb, jeb->offset | REF_NORMAL, je32_to_cpu(summary->cln_mkr), NULL); |