]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.3-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 17 Apr 2012 21:17:57 +0000 (14:17 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 17 Apr 2012 21:17:57 +0000 (14:17 -0700)
added patches:
ext4-address-scalability-issue-by-removing-extent-cache-statistics.patch
ia64-fix-futex_atomic_cmpxchg_inatomic.patch

queue-3.3/ext4-address-scalability-issue-by-removing-extent-cache-statistics.patch [new file with mode: 0644]
queue-3.3/ia64-fix-futex_atomic_cmpxchg_inatomic.patch [new file with mode: 0644]
queue-3.3/series

diff --git a/queue-3.3/ext4-address-scalability-issue-by-removing-extent-cache-statistics.patch b/queue-3.3/ext4-address-scalability-issue-by-removing-extent-cache-statistics.patch
new file mode 100644 (file)
index 0000000..94f9554
--- /dev/null
@@ -0,0 +1,86 @@
+From 9cd70b347e9761ea2d2ac3d758c529a48a8193e6 Mon Sep 17 00:00:00 2001
+From: Theodore Ts'o <tytso@mit.edu>
+Date: Mon, 16 Apr 2012 12:16:20 -0400
+Subject: ext4: address scalability issue by removing extent cache statistics
+
+From: Theodore Ts'o <tytso@mit.edu>
+
+commit 9cd70b347e9761ea2d2ac3d758c529a48a8193e6 upstream.
+
+Andi Kleen and Tim Chen have reported that under certain circumstances
+the extent cache statistics are causing scalability problems due to
+cache line bounces.
+
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/ext4/ext4.h    |    3 ---
+ fs/ext4/extents.c |    4 ----
+ fs/ext4/super.c   |   16 ----------------
+ 3 files changed, 23 deletions(-)
+
+--- a/fs/ext4/ext4.h
++++ b/fs/ext4/ext4.h
+@@ -1195,9 +1195,6 @@ struct ext4_sb_info {
+       unsigned long s_ext_blocks;
+       unsigned long s_ext_extents;
+ #endif
+-      /* ext4 extent cache stats */
+-      unsigned long extent_cache_hits;
+-      unsigned long extent_cache_misses;
+       /* for buddy allocator */
+       struct ext4_group_info ***s_group_info;
+--- a/fs/ext4/extents.c
++++ b/fs/ext4/extents.c
+@@ -2051,10 +2051,6 @@ static int ext4_ext_check_cache(struct i
+               ret = 1;
+       }
+ errout:
+-      if (!ret)
+-              sbi->extent_cache_misses++;
+-      else
+-              sbi->extent_cache_hits++;
+       trace_ext4_ext_in_cache(inode, block, ret);
+       spin_unlock(&EXT4_I(inode)->i_block_reservation_lock);
+       return ret;
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -2503,18 +2503,6 @@ static ssize_t lifetime_write_kbytes_sho
+                         EXT4_SB(sb)->s_sectors_written_start) >> 1)));
+ }
+-static ssize_t extent_cache_hits_show(struct ext4_attr *a,
+-                                    struct ext4_sb_info *sbi, char *buf)
+-{
+-      return snprintf(buf, PAGE_SIZE, "%lu\n", sbi->extent_cache_hits);
+-}
+-
+-static ssize_t extent_cache_misses_show(struct ext4_attr *a,
+-                                      struct ext4_sb_info *sbi, char *buf)
+-{
+-      return snprintf(buf, PAGE_SIZE, "%lu\n", sbi->extent_cache_misses);
+-}
+-
+ static ssize_t inode_readahead_blks_store(struct ext4_attr *a,
+                                         struct ext4_sb_info *sbi,
+                                         const char *buf, size_t count)
+@@ -2572,8 +2560,6 @@ static struct ext4_attr ext4_attr_##name
+ EXT4_RO_ATTR(delayed_allocation_blocks);
+ EXT4_RO_ATTR(session_write_kbytes);
+ EXT4_RO_ATTR(lifetime_write_kbytes);
+-EXT4_RO_ATTR(extent_cache_hits);
+-EXT4_RO_ATTR(extent_cache_misses);
+ EXT4_ATTR_OFFSET(inode_readahead_blks, 0644, sbi_ui_show,
+                inode_readahead_blks_store, s_inode_readahead_blks);
+ EXT4_RW_ATTR_SBI_UI(inode_goal, s_inode_goal);
+@@ -2589,8 +2575,6 @@ static struct attribute *ext4_attrs[] =
+       ATTR_LIST(delayed_allocation_blocks),
+       ATTR_LIST(session_write_kbytes),
+       ATTR_LIST(lifetime_write_kbytes),
+-      ATTR_LIST(extent_cache_hits),
+-      ATTR_LIST(extent_cache_misses),
+       ATTR_LIST(inode_readahead_blks),
+       ATTR_LIST(inode_goal),
+       ATTR_LIST(mb_stats),
diff --git a/queue-3.3/ia64-fix-futex_atomic_cmpxchg_inatomic.patch b/queue-3.3/ia64-fix-futex_atomic_cmpxchg_inatomic.patch
new file mode 100644 (file)
index 0000000..a7865f0
--- /dev/null
@@ -0,0 +1,56 @@
+From c76f39bddb84f93f70a5520d9253ec0317bec216 Mon Sep 17 00:00:00 2001
+From: "Luck, Tony" <tony.luck@intel.com>
+Date: Mon, 16 Apr 2012 16:28:01 -0700
+Subject: ia64: fix futex_atomic_cmpxchg_inatomic()
+
+From: "Luck, Tony" <tony.luck@intel.com>
+
+commit c76f39bddb84f93f70a5520d9253ec0317bec216 upstream.
+
+Michel Lespinasse cleaned up the futex calling conventions in commit
+37a9d912b24f ("futex: Sanitize cmpxchg_futex_value_locked API").
+
+But the ia64 implementation was subtly broken.  Gcc does not know that
+register "r8" will be updated by the fault handler if the cmpxchg
+instruction takes an exception.  So it feels safe in letting the
+initialization of r8 slide to after the cmpxchg.  Result: we always
+return 0 whether the user address faulted or not.
+
+Fix by moving the initialization of r8 into the __asm__ code so gcc
+won't move it.
+
+Reported-by: <emeric.maschino@gmail.com>
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=42757
+Tested-by: <emeric.maschino@gmail.com>
+Acked-by: Michel Lespinasse <walken@google.com>
+Signed-off-by: Tony Luck <tony.luck@intel.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/ia64/include/asm/futex.h |    9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+--- a/arch/ia64/include/asm/futex.h
++++ b/arch/ia64/include/asm/futex.h
+@@ -107,15 +107,16 @@ futex_atomic_cmpxchg_inatomic(u32 *uval,
+               return -EFAULT;
+       {
+-              register unsigned long r8 __asm ("r8") = 0;
++              register unsigned long r8 __asm ("r8");
+               unsigned long prev;
+               __asm__ __volatile__(
+                       "       mf;;                                    \n"
+-                      "       mov ar.ccv=%3;;                         \n"
+-                      "[1:]   cmpxchg4.acq %0=[%1],%2,ar.ccv          \n"
++                      "       mov %0=r0                               \n"
++                      "       mov ar.ccv=%4;;                         \n"
++                      "[1:]   cmpxchg4.acq %1=[%2],%3,ar.ccv          \n"
+                       "       .xdata4 \"__ex_table\", 1b-., 2f-.      \n"
+                       "[2:]"
+-                      : "=r" (prev)
++                      : "=r" (r8), "=r" (prev)
+                       : "r" (uaddr), "r" (newval),
+                         "rO" ((long) (unsigned) oldval)
+                       : "memory");
index ba4040a3b6971f252eef7eef9e2d21c41252e327..a85dda49794b4dcfa085134007e440f8594c3459 100644 (file)
@@ -16,3 +16,5 @@ bluetooth-hci_core-fix-null-pointer-dereference-at-unregister.patch
 bluetooth-remove-unneeded-locking.patch
 revert-btrfs-increase-the-global-block-reserve-estimates.patch
 alsa-hda-realtek-add-a-fixup-entry-for-acer-aspire-8940g.patch
+ext4-address-scalability-issue-by-removing-extent-cache-statistics.patch
+ia64-fix-futex_atomic_cmpxchg_inatomic.patch