Revision b121186ab1b12e2a96a945d88eae0735b4542158 authored by Alex Shi on 21 August 2012, 23:16:08 UTC, committed by Linus Torvalds on 21 August 2012, 23:45:03 UTC
Commit cfd19c5a9ecf ("mm: only set page->pfmemalloc when
ALLOC_NO_WATERMARKS was used") tried to narrow down page->pfmemalloc
setting, but it missed some places the pfmemalloc should be set.

So, in __slab_alloc, the unalignment pfmemalloc and ALLOC_NO_WATERMARKS
cause incorrect deactivate_slab() on our core2 server:

    64.73%           fio  [kernel.kallsyms]     [k] _raw_spin_lock
                     |
                     --- _raw_spin_lock
                        |
                        |---0.34%-- deactivate_slab
                        |          __slab_alloc
                        |          kmem_cache_alloc
                        |          |

That causes our fio sync write performance to have a 40% regression.

Move the checking in get_page_from_freelist() which resolves this issue.

Signed-off-by: Alex Shi <alex.shi@intel.com>
Acked-by: Mel Gorman <mgorman@suse.de>
Cc: David Miller <davem@davemloft.net
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Tested-by: Eric Dumazet <eric.dumazet@gmail.com>
Tested-by: Sage Weil <sage@inktank.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 5ed12f1
History
File Mode Size
Kconfig -rw-r--r-- 473 bytes
Makefile -rw-r--r-- 251 bytes
attr.c -rw-r--r-- 2.6 KB
bfind.c -rw-r--r-- 4.6 KB
bitmap.c -rw-r--r-- 5.8 KB
bnode.c -rw-r--r-- 11.3 KB
brec.c -rw-r--r-- 13.5 KB
btree.c -rw-r--r-- 8.8 KB
btree.h -rw-r--r-- 5.4 KB
catalog.c -rw-r--r-- 9.2 KB
dir.c -rw-r--r-- 7.7 KB
extent.c -rw-r--r-- 13.5 KB
hfs.h -rw-r--r-- 9.1 KB
hfs_fs.h -rw-r--r-- 8.7 KB
inode.c -rw-r--r-- 18.0 KB
mdb.c -rw-r--r-- 10.4 KB
part_tbl.c -rw-r--r-- 2.9 KB
string.c -rw-r--r-- 3.8 KB
super.c -rw-r--r-- 12.0 KB
sysdep.c -rw-r--r-- 1.0 KB
trans.c -rw-r--r-- 3.4 KB

back to top