[JFFS2] kernel BUG at fs/jffs2/gc.c:516!
Brijesh Singh
brijesh.s.singh at gmail.com
Tue Nov 4 23:53:06 EST 2008
Hi David,
Sorry for the delayed response.
>> > I have gone through all the mailing archive possible. Kyungmin park
>> > had reported the problem,
>> > but I could not find the fix.
>> >
>> > Here is the mail:
>> > http://lists.infradead.org/pipermail/linux-mtd/2007-April/017979.html
>> >
>> > Any idea,why this BUG occurs/occurred? Is there any fix available?
>>
>
> Does this fix it?
>
> diff --git a/fs/jffs2/background.c b/fs/jffs2/background.c
> index 8adebd3..3cceef4 100644
> --- a/fs/jffs2/background.c
> +++ b/fs/jffs2/background.c
> @@ -85,15 +85,15 @@ static int jffs2_garbage_collect_thread(void *_c)
> for (;;) {
> allow_signal(SIGHUP);
> again:
> + spin_lock(&c->erase_completion_lock);
> if (!jffs2_thread_should_wake(c)) {
> set_current_state (TASK_INTERRUPTIBLE);
> + spin_unlock(&c->erase_completion_lock);
> D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread sleeping...\n"));
> - /* Yes, there's a race here; we checked jffs2_thread_should_wake()
> - before setting current->state to TASK_INTERRUPTIBLE. But it doesn't
> - matter - We don't care if we miss a wakeup, because the GC thread
> - is only an optimisation anyway. */
> schedule();
> - }
> + } else
> + spin_unlock(&c->erase_completion_lock);
> +
>
> /* This thread is purely an optimisation. But if it runs when
> other things could be running, it actually makes things a
>
> --
> David Woodhouse Open Source Technology Centre
> David.Woodhouse at intel.com Intel Corporation
Yes this patch fixed the problem.I have tested with fsstress for 2
days.I could not reproduce the BUG again.
Thanks,
Brijesh
More information about the linux-mtd
mailing list