diff options
author | David Woodhouse <dwmw2@infradead.org> | 2007-04-23 07:11:46 -0400 |
---|---|---|
committer | David Woodhouse <dwmw2@infradead.org> | 2007-04-23 07:11:46 -0400 |
commit | 44b998e1eb254edc87177819ee693690fac68b7f (patch) | |
tree | 2f7d5511d8f0efc9e824a042d5ff50793a74de31 /fs/jffs2/gc.c | |
parent | 566865a2a4791c9290155f651ee0c2c606db0b1d (diff) |
[JFFS2] Improve failure mode if inode checking leaves unchecked space.
We should never find the unchecked size is non-zero after we've finished
checking all inodes. If it happens, used to BUG(), leaving the alloc_sem
held and deadlocking. Instead, just return -ENOSPC after complaining. The
GC thread will die, but read-only operation should be able to continue and
the file system should be unmountable.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Diffstat (limited to 'fs/jffs2/gc.c')
-rw-r--r-- | fs/jffs2/gc.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/jffs2/gc.c b/fs/jffs2/gc.c index 3a3cf225981f..e92cf0f02529 100644 --- a/fs/jffs2/gc.c +++ b/fs/jffs2/gc.c | |||
@@ -144,7 +144,8 @@ int jffs2_garbage_collect_pass(struct jffs2_sb_info *c) | |||
144 | c->unchecked_size); | 144 | c->unchecked_size); |
145 | jffs2_dbg_dump_block_lists_nolock(c); | 145 | jffs2_dbg_dump_block_lists_nolock(c); |
146 | spin_unlock(&c->erase_completion_lock); | 146 | spin_unlock(&c->erase_completion_lock); |
147 | BUG(); | 147 | up(&c->alloc_sem); |
148 | return -ENOSPC; | ||
148 | } | 149 | } |
149 | 150 | ||
150 | spin_unlock(&c->erase_completion_lock); | 151 | spin_unlock(&c->erase_completion_lock); |