]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 16 Feb 2014 20:48:11 +0000 (12:48 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 16 Feb 2014 20:48:11 +0000 (12:48 -0800)
added patches:
ext4-protect-group-inode-free-counting-with-group-lock.patch
printk-fix-scheduling-while-atomic-problem-in-console_cpu_notify.patch

queue-3.4/ext4-protect-group-inode-free-counting-with-group-lock.patch [new file with mode: 0644]
queue-3.4/printk-fix-scheduling-while-atomic-problem-in-console_cpu_notify.patch [new file with mode: 0644]
queue-3.4/series

diff --git a/queue-3.4/ext4-protect-group-inode-free-counting-with-group-lock.patch b/queue-3.4/ext4-protect-group-inode-free-counting-with-group-lock.patch
new file mode 100644 (file)
index 0000000..89c0498
--- /dev/null
@@ -0,0 +1,64 @@
+From 6f2e9f0e7d795214b9cf5a47724a273b705fd113 Mon Sep 17 00:00:00 2001
+From: Tao Ma <boyu.mt@taobao.com>
+Date: Mon, 28 May 2012 18:20:59 -0400
+Subject: ext4: protect group inode free counting with group lock
+
+From: Tao Ma <boyu.mt@taobao.com>
+
+commit 6f2e9f0e7d795214b9cf5a47724a273b705fd113 upstream.
+
+Now when we set the group inode free count, we don't have a proper
+group lock so that multiple threads may decrease the inode free
+count at the same time. And e2fsck will complain something like:
+
+Free inodes count wrong for group #1 (1, counted=0).
+Fix? no
+
+Free inodes count wrong for group #2 (3, counted=0).
+Fix? no
+
+Directories count wrong for group #2 (780, counted=779).
+Fix? no
+
+Free inodes count wrong for group #3 (2272, counted=2273).
+Fix? no
+
+So this patch try to protect it with the ext4_lock_group.
+
+btw, it is found by xfstests test case 269 and the volume is
+mkfsed with the parameter
+"-O ^resize_inode,^uninit_bg,extent,meta_bg,flex_bg,ext_attr"
+and I have run it 100 times and the error in e2fsck doesn't
+show up again.
+
+Signed-off-by: Tao Ma <boyu.mt@taobao.com>
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Signed-off-by: Benjamin LaHaise <bcrl@kvack.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+
+---
+ fs/ext4/ialloc.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/fs/ext4/ialloc.c
++++ b/fs/ext4/ialloc.c
+@@ -778,6 +778,8 @@ got:
+                       ext4_itable_unused_set(sb, gdp,
+                                       (EXT4_INODES_PER_GROUP(sb) - ino));
+               up_read(&grp->alloc_sem);
++      } else {
++              ext4_lock_group(sb, group);
+       }
+       ext4_free_inodes_set(sb, gdp, ext4_free_inodes_count(sb, gdp) - 1);
+       if (S_ISDIR(mode)) {
+@@ -790,8 +792,8 @@ got:
+       }
+       if (EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) {
+               gdp->bg_checksum = ext4_group_desc_csum(sbi, group, gdp);
+-              ext4_unlock_group(sb, group);
+       }
++      ext4_unlock_group(sb, group);
+       BUFFER_TRACE(group_desc_bh, "call ext4_handle_dirty_metadata");
+       err = ext4_handle_dirty_metadata(handle, NULL, group_desc_bh);
diff --git a/queue-3.4/printk-fix-scheduling-while-atomic-problem-in-console_cpu_notify.patch b/queue-3.4/printk-fix-scheduling-while-atomic-problem-in-console_cpu_notify.patch
new file mode 100644 (file)
index 0000000..4e71355
--- /dev/null
@@ -0,0 +1,34 @@
+From 85eae82a0855d49852b87deac8653e4ebc8b291f Mon Sep 17 00:00:00 2001
+From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
+Date: Mon, 15 Oct 2012 21:35:59 -0700
+Subject: printk: Fix scheduling-while-atomic problem in console_cpu_notify()
+
+From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
+
+commit 85eae82a0855d49852b87deac8653e4ebc8b291f upstream.
+
+The console_cpu_notify() function runs with interrupts disabled in the
+CPU_DYING case.  It therefore cannot block, for example, as will happen
+when it calls console_lock().  Therefore, remove the CPU_DYING leg of
+the switch statement to avoid this problem.
+
+Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+Reviewed-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Guillaume Morin <guillaume@morinfr.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/printk.c |    1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/kernel/printk.c
++++ b/kernel/printk.c
+@@ -1172,7 +1172,6 @@ static int __cpuinit console_cpu_notify(
+       switch (action) {
+       case CPU_ONLINE:
+       case CPU_DEAD:
+-      case CPU_DYING:
+       case CPU_DOWN_FAILED:
+       case CPU_UP_CANCELED:
+               console_lock();
index 667adaf5eef2c816e3e636679fbc8632236c8412..84b3b6c2827ef62d0910df0d75a83a059471decf 100644 (file)
@@ -3,3 +3,5 @@ alsa-hda-realtek-avoid-invalid-coefs-for-alc271x.patch
 mm-__set_page_dirty_nobuffers-uses-spin_lock_irqsave-instead-of-spin_lock_irq.patch
 mm-__set_page_dirty-uses-spin_lock_irqsave-instead-of-spin_lock_irq.patch
 x86-hweight-fix-bug-when-booting-with-config_gcov_profile_all-y.patch
+printk-fix-scheduling-while-atomic-problem-in-console_cpu_notify.patch
+ext4-protect-group-inode-free-counting-with-group-lock.patch