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-- 3.2 KB
Makefile -rw-r--r-- 2.6 KB
kmem.c -rw-r--r-- 2.8 KB
kmem.h -rw-r--r-- 3.0 KB
mrlock.h -rw-r--r-- 2.0 KB
time.h -rw-r--r-- 1.0 KB
uuid.c -rw-r--r-- 1.6 KB
uuid.h -rw-r--r-- 1.0 KB
xfs.h -rw-r--r-- 906 bytes
xfs_acl.c -rw-r--r-- 8.7 KB
xfs_acl.h -rw-r--r-- 2.1 KB
xfs_ag.h -rw-r--r-- 9.5 KB
xfs_alloc.c -rw-r--r-- 68.8 KB
xfs_alloc.h -rw-r--r-- 8.4 KB
xfs_alloc_btree.c -rw-r--r-- 9.4 KB
xfs_alloc_btree.h -rw-r--r-- 2.9 KB
xfs_aops.c -rw-r--r-- 40.7 KB
xfs_aops.h -rw-r--r-- 2.3 KB
xfs_attr.c -rw-r--r-- 55.2 KB
xfs_attr.h -rw-r--r-- 5.5 KB
xfs_attr_leaf.c -rw-r--r-- 84.4 KB
xfs_attr_leaf.h -rw-r--r-- 10.3 KB
xfs_attr_sf.h -rw-r--r-- 2.8 KB
xfs_bit.c -rw-r--r-- 2.8 KB
xfs_bit.h -rw-r--r-- 2.1 KB
xfs_bmap.c -rw-r--r-- 178.5 KB
xfs_bmap.h -rw-r--r-- 8.0 KB
xfs_bmap_btree.c -rw-r--r-- 20.6 KB
xfs_bmap_btree.h -rw-r--r-- 7.1 KB
xfs_btree.c -rw-r--r-- 94.0 KB
xfs_btree.h -rw-r--r-- 14.0 KB
xfs_buf.c -rw-r--r-- 39.4 KB
xfs_buf.h -rw-r--r-- 11.1 KB
xfs_buf_item.c -rw-r--r-- 31.1 KB
xfs_buf_item.h -rw-r--r-- 4.2 KB
xfs_da_btree.c -rw-r--r-- 62.0 KB
xfs_da_btree.h -rw-r--r-- 9.0 KB
xfs_dfrag.c -rw-r--r-- 12.4 KB
xfs_dfrag.h -rw-r--r-- 1.4 KB
xfs_dinode.h -rw-r--r-- 8.2 KB
xfs_dir2.c -rw-r--r-- 16.0 KB
xfs_dir2.h -rw-r--r-- 2.1 KB
xfs_dir2_block.c -rw-r--r-- 34.4 KB
xfs_dir2_data.c -rw-r--r-- 24.5 KB
xfs_dir2_format.h -rw-r--r-- 16.9 KB
xfs_dir2_leaf.c -rw-r--r-- 53.3 KB
xfs_dir2_node.c -rw-r--r-- 56.0 KB
xfs_dir2_priv.h -rw-r--r-- 6.2 KB
xfs_dir2_sf.c -rw-r--r-- 37.4 KB
xfs_discard.c -rw-r--r-- 6.4 KB
xfs_discard.h -rw-r--r-- 262 bytes
xfs_dquot.c -rw-r--r-- 25.4 KB
xfs_dquot.h -rw-r--r-- 5.0 KB
xfs_dquot_item.c -rw-r--r-- 11.7 KB
xfs_dquot_item.h -rw-r--r-- 1.7 KB
xfs_error.c -rw-r--r-- 4.0 KB
xfs_error.h -rw-r--r-- 5.4 KB
xfs_export.c -rw-r--r-- 6.3 KB
xfs_export.h -rw-r--r-- 2.0 KB
xfs_extent_busy.c -rw-r--r-- 15.3 KB
xfs_extent_busy.h -rw-r--r-- 2.3 KB
xfs_extfree_item.c -rw-r--r-- 13.4 KB
xfs_extfree_item.h -rw-r--r-- 5.1 KB
xfs_file.c -rw-r--r-- 28.1 KB
xfs_filestream.c -rw-r--r-- 23.0 KB
xfs_filestream.h -rw-r--r-- 2.2 KB
xfs_fs.h -rw-r--r-- 19.1 KB
xfs_fs_subr.c -rw-r--r-- 2.3 KB
xfs_fsops.c -rw-r--r-- 20.5 KB
xfs_fsops.h -rw-r--r-- 1.3 KB
xfs_globals.c -rw-r--r-- 1.5 KB
xfs_ialloc.c -rw-r--r-- 41.1 KB
xfs_ialloc.h -rw-r--r-- 4.9 KB
xfs_ialloc_btree.c -rw-r--r-- 6.3 KB
xfs_ialloc_btree.h -rw-r--r-- 3.2 KB
xfs_iget.c -rw-r--r-- 18.6 KB
xfs_inode.c -rw-r--r-- 104.7 KB
xfs_inode.h -rw-r--r-- 19.6 KB
xfs_inode_item.c -rw-r--r-- 23.8 KB
xfs_inode_item.h -rw-r--r-- 6.1 KB
xfs_inum.h -rw-r--r-- 2.3 KB
xfs_ioctl.c -rw-r--r-- 35.7 KB
xfs_ioctl.h -rw-r--r-- 1.8 KB
xfs_ioctl32.c -rw-r--r-- 18.2 KB
xfs_ioctl32.h -rw-r--r-- 9.0 KB
xfs_iomap.c -rw-r--r-- 19.6 KB
xfs_iomap.h -rw-r--r-- 1.2 KB
xfs_iops.c -rw-r--r-- 29.7 KB
xfs_iops.h -rw-r--r-- 1.0 KB
xfs_itable.c -rw-r--r-- 19.5 KB
xfs_itable.h -rw-r--r-- 3.2 KB
xfs_linux.h -rw-r--r-- 7.5 KB
xfs_log.c -rw-r--r-- 100.0 KB
xfs_log.h -rw-r--r-- 5.4 KB
xfs_log_cil.c -rw-r--r-- 26.0 KB
xfs_log_priv.h -rw-r--r-- 24.8 KB
xfs_log_recover.c -rw-r--r-- 104.7 KB
xfs_log_recover.h -rw-r--r-- 2.0 KB
xfs_message.c -rw-r--r-- 2.5 KB
xfs_message.h -rw-r--r-- 1.1 KB
xfs_mount.c -rw-r--r-- 65.8 KB
xfs_mount.h -rw-r--r-- 15.0 KB
xfs_mru_cache.c -rw-r--r-- 17.8 KB
xfs_mru_cache.h -rw-r--r-- 2.3 KB
xfs_qm.c -rw-r--r-- 46.0 KB
xfs_qm.h -rw-r--r-- 4.7 KB
xfs_qm_bhv.c -rw-r--r-- 4.4 KB
xfs_qm_syscalls.c -rw-r--r-- 24.1 KB
xfs_quota.h -rw-r--r-- 14.8 KB
xfs_quota_priv.h -rw-r--r-- 1.5 KB
xfs_quotaops.c -rw-r--r-- 3.0 KB
xfs_rename.c -rw-r--r-- 9.2 KB
xfs_rtalloc.c -rw-r--r-- 60.7 KB
xfs_rtalloc.h -rw-r--r-- 5.2 KB
xfs_sb.h -rw-r--r-- 18.7 KB
xfs_stats.c -rw-r--r-- 5.0 KB
xfs_stats.h -rw-r--r-- 7.3 KB
xfs_super.c -rw-r--r-- 43.2 KB
xfs_super.h -rw-r--r-- 2.2 KB
xfs_sync.c -rw-r--r-- 25.8 KB
xfs_sync.h -rw-r--r-- 1.8 KB
xfs_sysctl.c -rw-r--r-- 6.1 KB
xfs_sysctl.h -rw-r--r-- 3.3 KB
xfs_trace.c -rw-r--r-- 1.6 KB
xfs_trace.h -rw-r--r-- 56.2 KB
xfs_trans.c -rw-r--r-- 44.9 KB
xfs_trans.h -rw-r--r-- 19.1 KB
xfs_trans_ail.c -rw-r--r-- 20.9 KB
xfs_trans_buf.c -rw-r--r-- 20.8 KB
xfs_trans_dquot.c -rw-r--r-- 21.7 KB
xfs_trans_extfree.c -rw-r--r-- 3.5 KB
xfs_trans_inode.c -rw-r--r-- 4.5 KB
xfs_trans_priv.h -rw-r--r-- 4.5 KB
xfs_trans_space.h -rw-r--r-- 3.4 KB
xfs_types.h -rw-r--r-- 5.9 KB
xfs_utils.c -rw-r--r-- 8.0 KB
xfs_utils.h -rw-r--r-- 1.1 KB
xfs_vnode.h -rw-r--r-- 1.9 KB
xfs_vnodeops.c -rw-r--r-- 54.9 KB
xfs_vnodeops.h -rw-r--r-- 2.7 KB
xfs_xattr.c -rw-r--r-- 5.6 KB

back to top