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
AUTHORS -rw-r--r-- 2.6 KB
CHANGES -rw-r--r-- 46.2 KB
Kconfig -rw-r--r-- 7.2 KB
Makefile -rw-r--r-- 614 bytes
README -rw-r--r-- 38.3 KB
TODO -rw-r--r-- 5.2 KB
asn1.c -rw-r--r-- 14.9 KB
cache.c -rw-r--r-- 7.9 KB
cifs_debug.c -rw-r--r-- 17.2 KB
cifs_debug.h -rw-r--r-- 2.4 KB
cifs_dfs_ref.c -rw-r--r-- 9.5 KB
cifs_fs_sb.h -rw-r--r-- 3.1 KB
cifs_spnego.c -rw-r--r-- 4.8 KB
cifs_spnego.h -rw-r--r-- 1.6 KB
cifs_unicode.c -rw-r--r-- 10.5 KB
cifs_unicode.h -rw-r--r-- 9.1 KB
cifs_uniupr.h -rw-r--r-- 12.6 KB
cifsacl.c -rw-r--r-- 35.8 KB
cifsacl.h -rw-r--r-- 2.9 KB
cifsencrypt.c -rw-r--r-- 20.7 KB
cifsfs.c -rw-r--r-- 32.2 KB
cifsfs.h -rw-r--r-- 5.7 KB
cifsglob.h -rw-r--r-- 39.9 KB
cifspdu.h -rw-r--r-- 80.8 KB
cifsproto.h -rw-r--r-- 21.8 KB
cifssmb.c -rw-r--r-- 189.1 KB
connect.c -rw-r--r-- 111.1 KB
dir.c -rw-r--r-- 20.7 KB
dns_resolve.c -rw-r--r-- 2.8 KB
dns_resolve.h -rw-r--r-- 1.2 KB
export.c -rw-r--r-- 2.4 KB
file.c -rw-r--r-- 87.4 KB
fscache.c -rw-r--r-- 6.4 KB
fscache.h -rw-r--r-- 4.5 KB
inode.c -rw-r--r-- 58.6 KB
ioctl.c -rw-r--r-- 3.0 KB
link.c -rw-r--r-- 14.7 KB
misc.c -rw-r--r-- 15.9 KB
netmisc.c -rw-r--r-- 39.2 KB
nterr.c -rw-r--r-- 33.5 KB
nterr.h -rw-r--r-- 30.0 KB
ntlmssp.h -rw-r--r-- 5.7 KB
readdir.c -rw-r--r-- 23.5 KB
rfc1002pdu.h -rw-r--r-- 2.8 KB
sess.c -rw-r--r-- 28.6 KB
smb1ops.c -rw-r--r-- 19.6 KB
smb2glob.h -rw-r--r-- 1.4 KB
smb2inode.c -rw-r--r-- 4.5 KB
smb2maperror.c -rw-r--r-- 126.7 KB
smb2misc.c -rw-r--r-- 10.5 KB
smb2ops.c -rw-r--r-- 9.5 KB
smb2pdu.c -rw-r--r-- 29.6 KB
smb2pdu.h -rw-r--r-- 19.1 KB
smb2proto.h -rw-r--r-- 3.8 KB
smb2status.h -rw-r--r-- 125.2 KB
smb2transport.c -rw-r--r-- 4.7 KB
smbencrypt.c -rw-r--r-- 6.0 KB
smberr.h -rw-r--r-- 7.5 KB
smbfsctl.h -rw-r--r-- 4.7 KB
transport.c -rw-r--r-- 23.2 KB
xattr.c -rw-r--r-- 11.7 KB

README

back to top