From dfd3cf133c255c4ae2dd1125545114a674120c5c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 17 Apr 2012 14:17:53 -0700 Subject: [PATCH] 3.2-stable patches added patches: ext4-address-scalability-issue-by-removing-extent-cache-statistics.patch ia64-fix-futex_atomic_cmpxchg_inatomic.patch --- ...-by-removing-extent-cache-statistics.patch | 86 +++++++++++++++++++ ...64-fix-futex_atomic_cmpxchg_inatomic.patch | 56 ++++++++++++ queue-3.2/series | 2 + 3 files changed, 144 insertions(+) create mode 100644 queue-3.2/ext4-address-scalability-issue-by-removing-extent-cache-statistics.patch create mode 100644 queue-3.2/ia64-fix-futex_atomic_cmpxchg_inatomic.patch diff --git a/queue-3.2/ext4-address-scalability-issue-by-removing-extent-cache-statistics.patch b/queue-3.2/ext4-address-scalability-issue-by-removing-extent-cache-statistics.patch new file mode 100644 index 00000000000..eccb7fece35 --- /dev/null +++ b/queue-3.2/ext4-address-scalability-issue-by-removing-extent-cache-statistics.patch @@ -0,0 +1,86 @@ +From 9cd70b347e9761ea2d2ac3d758c529a48a8193e6 Mon Sep 17 00:00:00 2001 +From: Theodore Ts'o +Date: Mon, 16 Apr 2012 12:16:20 -0400 +Subject: ext4: address scalability issue by removing extent cache statistics + +From: Theodore Ts'o + +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" +Signed-off-by: Greg Kroah-Hartman + +--- + 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), diff --git a/queue-3.2/ia64-fix-futex_atomic_cmpxchg_inatomic.patch b/queue-3.2/ia64-fix-futex_atomic_cmpxchg_inatomic.patch new file mode 100644 index 00000000000..a7865f07b30 --- /dev/null +++ b/queue-3.2/ia64-fix-futex_atomic_cmpxchg_inatomic.patch @@ -0,0 +1,56 @@ +From c76f39bddb84f93f70a5520d9253ec0317bec216 Mon Sep 17 00:00:00 2001 +From: "Luck, Tony" +Date: Mon, 16 Apr 2012 16:28:01 -0700 +Subject: ia64: fix futex_atomic_cmpxchg_inatomic() + +From: "Luck, Tony" + +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: +Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=42757 +Tested-by: +Acked-by: Michel Lespinasse +Signed-off-by: Tony Luck +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + 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"); diff --git a/queue-3.2/series b/queue-3.2/series index 9d7dfb21be4..32b27414f84 100644 --- a/queue-3.2/series +++ b/queue-3.2/series @@ -9,3 +9,5 @@ arm-7379-1-dt-fix-atags_to_fdt-second-call-site.patch arm-7384-1-thumbee-disable-userspace-teehbr-access-for-config_arm_thumbee.patch md-bitmap-prevent-bitmap_daemon_work-running-while-initialising-bitmap.patch bluetooth-hci_ldisc-fix-null-pointer-dereference-on-tty_close.patch +ext4-address-scalability-issue-by-removing-extent-cache-statistics.patch +ia64-fix-futex_atomic_cmpxchg_inatomic.patch -- 2.47.3