diff options
author | David Woodhouse <dwmw2@infradead.org> | 2008-04-23 02:17:51 +0200 |
---|---|---|
committer | David Woodhouse <dwmw2@infradead.org> | 2008-04-23 02:24:17 +0200 |
commit | 85a62db6245a82f07a31b387915ee2180b9ea11a (patch) | |
tree | 9de37a0f9267f92aac41e817c5e8fec6887400a1 /fs/jffs2/erase.c | |
parent | [JFFS2] Fix free space leak with in-band cleanmarkers (diff) | |
download | linux-85a62db6245a82f07a31b387915ee2180b9ea11a.tar.xz linux-85a62db6245a82f07a31b387915ee2180b9ea11a.zip |
[JFFS2] Add paranoia debugging for superblock counts
The problem fixed in commit 014b164e1392a166fe96e003d2f0e7ad2e2a0bb7
(space leak with in-band cleanmarkers) would have been caught a lot
quicker if our paranoid debugging mode had included adding up the size
counts from all the eraseblocks and comparing the totals with the counts
in the superblock. Add that.
Make jffs2_mark_erased_block() file the newly-erased block on the
free_list before calling the debug function, to make it happy.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Diffstat (limited to 'fs/jffs2/erase.c')
-rw-r--r-- | fs/jffs2/erase.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/jffs2/erase.c b/fs/jffs2/erase.c index bdc6a7bec802..65d91943fc2d 100644 --- a/fs/jffs2/erase.c +++ b/fs/jffs2/erase.c @@ -460,12 +460,13 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb if (c->cleanmarker_size && !jffs2_cleanmarker_oob(c)) jffs2_link_node_ref(c, jeb, jeb->offset | REF_NORMAL, c->cleanmarker_size, NULL); - jffs2_dbg_acct_sanity_check_nolock(c,jeb); - jffs2_dbg_acct_paranoia_check_nolock(c, jeb); - list_add_tail(&jeb->list, &c->free_list); c->nr_erasing_blocks--; c->nr_free_blocks++; + + jffs2_dbg_acct_sanity_check_nolock(c, jeb); + jffs2_dbg_acct_paranoia_check_nolock(c, jeb); + spin_unlock(&c->erase_completion_lock); mutex_unlock(&c->erase_free_sem); wake_up(&c->erase_wait); |