]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
one more 2.6.22 patch added
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 21 Aug 2007 06:29:11 +0000 (23:29 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 21 Aug 2007 06:29:11 +0000 (23:29 -0700)
queue-2.6.22/jffs2-locking-regression-fix.patch [new file with mode: 0644]
queue-2.6.22/series

diff --git a/queue-2.6.22/jffs2-locking-regression-fix.patch b/queue-2.6.22/jffs2-locking-regression-fix.patch
new file mode 100644 (file)
index 0000000..2ce9eb7
--- /dev/null
@@ -0,0 +1,39 @@
+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) {
index cd9a5d2b09008ac902ce659b71d7c04709ebff47..4fd561e42364731405b66548eaa6fb853dba04b3 100644 (file)
@@ -17,3 +17,4 @@ x86_64-check-for-.cfi_rel_offset-in-cfi-probe.patch
 x86_64-change-pmds-invocation-to-single-macro.patch
 i386-handle-p6s-without-performance-counters-in-nmi-watchdog.patch
 i386-fix-double-fault-handler.patch
+jffs2-locking-regression-fix.patch