David Woodhouse wrote: > I think I'd prefer to make the can_mark_obsolete path also hold > alloc_sem while it's doing its thing. > > Giulio, please could you verify that this patch also fixes the problem? > > diff --git a/fs/jffs2/write.c b/fs/jffs2/write.c > index bc61859..664c164 100644 > --- a/fs/jffs2/write.c > +++ b/fs/jffs2/write.c > @@ -566,6 +566,9 @@ int jffs2_do_unlink(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, > struct jffs2_full_dirent **prev = &dir_f->dents; > uint32_t nhash = full_name_hash(name, namelen); > > + /* We don't actually want to reserve any space, but we do > + want to be holding the alloc_sem when we write to flash */ > + down(&c->alloc_sem); > down(&dir_f->sem); > > while ((*prev) && (*prev)->nhash <= nhash) { > > I've tested this patch with a 2.6.23-rc3-git2 snapshot and it solves the problem for me (see attachment for an example of what I was experiencing). Zac