JFFS2 appears to "freeze" during erase
Joakim Tjernlund
Joakim.Tjernlund at transmode.se
Thu Sep 21 07:17:52 EDT 2006
Radoslaw Bisewski wrote:
> This bug is caused by the use of erase_free_sem semaphore. Block erasing
> function jffs2_erase_block is called with erase_free_sem locked, i.e.
> erase_free_sem will be locked for the time needed to erase flash block (
> ~1 s for typical NOR chip), in the worst scenario access to file system
> may be blocked for a numer of seconds when the number of blocks is being
> erased. Workaround for this bug is simple - erase_free_sem cannot be
> locked when jffs2_erase_block function is called. See attached patch.
>
Me again
I think there is a bug in jffs2_erase_pending_blocks() after applying your patch:
spin_unlock(&c->erase_completion_lock);
done:
D1(printk(KERN_DEBUG "jffs2_erase_pending_blocks completed\n"));
up(&c->erase_free_sem);
the up(&c->erase_free_sem); needs to move to before done:
Jocke
More information about the linux-mtd
mailing list