--- /dev/null
+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
+@@ -1185,9 +1185,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
+@@ -2052,10 +2052,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
+@@ -2504,18 +2504,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)
+@@ -2573,8 +2561,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);
+@@ -2590,8 +2576,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),
--- /dev/null
+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");