JFFS2 BUG
giulio fedel
giulio.fedel at andorsystems.com
Fri Aug 17 13:28:20 EDT 2007
I post the same mail as Re: jffs2 kernel dump with 2.6.22-rc7 because
the problem may be the same...
In jffs2_do_unlink() in fs/jffs2/write.c
the jffs2_complete_reservation(c) is called even if
jffs2_reserve_space() is not called. This cause an unmatched
up(&c->alloc_sem) so the locking mechanism does not work.
People using MTD_CAP_NORFLASH flash _and_ CONFIG_JFFS2_SUMMARY do not
see the problem (see os-linux.h for the definition of
jffs2_can_mark_obsolete(c)).
Regards.
Giulio Fedel
--- fs/jffs2/write.c.orig 2007-08-17 19:01:04.000000000 +0200
+++ fs/jffs2/write.c 2007-08-17 19:00:41.000000000 +0200
@@ -549,6 +549,7 @@ int jffs2_do_unlink(struct jffs2_sb_info
/* File it. This will mark the old one obsolete. */
jffs2_add_fd_to_list(c, fd, &dir_f->dents);
up(&dir_f->sem);
+ jffs2_complete_reservation(c);
} else {
struct jffs2_full_dirent **prev = &dir_f->dents;
uint32_t nhash = full_name_hash(name, namelen);
@@ -605,7 +606,6 @@ int jffs2_do_unlink(struct jffs2_sb_info
up(&dead_f->sem);
}
- jffs2_complete_reservation(c);
return 0;
}
More information about the linux-mtd
mailing list