--- /dev/null
+From stable-bounces@linux.kernel.org Mon Aug 20 03:05:48 2007
+From: David Woodhouse <dwmw2@infradead.org>
+Date: Mon, 20 Aug 2007 11:05:29 +0100
+Subject: JFFS2 locking regression fix.
+To: torvalds@linux-foundation.org, stable@kernel.org
+Cc: Josh Boyer <jwboyer@gmail.com>, Joakim.Tjernlund@transmode.se, giulio fedel <giulio.fedel@andorsystems.com>
+Message-ID: <1187604329.3137.45.camel@shinybook.infradead.org>
+
+
+Commit a491486a2087ac3dfc00efb4f838c8d684afaf54 introduced a locking
+problem in JFFS2 -- we up() the alloc_sem when we weren't previously
+holding it. This leads to all kinds of fun behaviour later.
+
+There was a _reason_ for the
+ if (1 /* alternative path needs testing */ ||
+which the above-mentioned commit removed :)
+
+Discovered and debugged by Giulio Fedel <giulio.fedel@andorsystems.com>
+
+Signed-off-by: David Woodhouse <dwmw2@infradead.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/jffs2/write.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/fs/jffs2/write.c
++++ b/fs/jffs2/write.c
+@@ -553,6 +553,9 @@ int jffs2_do_unlink(struct jffs2_sb_info
+ 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) {