Revision 98837c7f82ef78aa38f40462aa2fcac68fd3acbf authored by Hugh Dickins on 04 March 2008, 22:29:06 UTC, committed by Linus Torvalds on 05 March 2008, 00:35:14 UTC
Page migration gave me free_hot_cold_page's VM_BUG_ON page->page_cgroup. remove_migration_pte was calling mem_cgroup_charge on the new page whenever it found a swap pte, before it had determined it to be a migration entry. That left a surplus reference count on the page_cgroup, so it was still attached when the page was later freed. Move that mem_cgroup_charge down to where we're sure it's a migration entry. We were already under i_mmap_lock or anon_vma->lock, so its GFP_KERNEL was already inappropriate: change that to GFP_ATOMIC. It's essential that remove_migration_pte removes all the migration entries, other crashes follow if not. So proceed even when the charge fails: normally it cannot, but after a mem_cgroup_force_empty it might - comment in the code. Signed-off-by: Hugh Dickins <hugh@veritas.com> Cc: David Rientjes <rientjes@google.com> Cc: Balbir Singh <balbir@linux.vnet.ibm.com> Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Hirokazu Takahashi <taka@valinux.co.jp> Cc: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Cc: Paul Menage <menage@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 61469f1
File | Mode | Size |
---|---|---|
basic | ||
genksyms | ||
kconfig | ||
ksymoops | ||
mod | ||
package | ||
rt-tester | ||
.gitignore | -rw-r--r-- | 77 bytes |
Kbuild.include | -rw-r--r-- | 9.1 KB |
Lindent | -rwxr-xr-x | 65 bytes |
Makefile | -rw-r--r-- | 893 bytes |
Makefile.build | -rw-r--r-- | 11.1 KB |
Makefile.clean | -rw-r--r-- | 3.2 KB |
Makefile.headersinst | -rw-r--r-- | 6.9 KB |
Makefile.host | -rw-r--r-- | 6.5 KB |
Makefile.lib | -rw-r--r-- | 6.7 KB |
Makefile.modinst | -rw-r--r-- | 1.0 KB |
Makefile.modpost | -rw-r--r-- | 4.9 KB |
bin2c.c | -rw-r--r-- | 702 bytes |
binoffset.c | -rw-r--r-- | 3.9 KB |
bloat-o-meter | -rwxr-xr-x | 1.7 KB |
checkincludes.pl | -rwxr-xr-x | 529 bytes |
checkkconfigsymbols.sh | -rwxr-xr-x | 1.8 KB |
checkpatch.pl | -rwxr-xr-x | 50.2 KB |
checkstack.pl | -rwxr-xr-x | 4.2 KB |
checksyscalls.sh | -rwxr-xr-x | 3.1 KB |
checkversion.pl | -rwxr-xr-x | 1.8 KB |
cleanfile | -rwxr-xr-x | 3.4 KB |
cleanpatch | -rwxr-xr-x | 5.0 KB |
conmakehash.c | -rw-r--r-- | 6.0 KB |
decodecode | -rw-r--r-- | 1.1 KB |
export_report.pl | -rw-r--r-- | 4.2 KB |
extract-ikconfig | -rwxr-xr-x | 1.7 KB |
gcc-version.sh | -rw-r--r-- | 818 bytes |
gcc-x86_64-has-stack-protector.sh | -rw-r--r-- | 187 bytes |
gen_initramfs_list.sh | -rw-r--r-- | 6.6 KB |
hdrcheck.sh | -rwxr-xr-x | 281 bytes |
kallsyms.c | -rw-r--r-- | 13.3 KB |
kernel-doc | -rwxr-xr-x | 55.2 KB |
makelst | -rwxr-xr-x | 773 bytes |
mkcompile_h | -rwxr-xr-x | 2.5 KB |
mkmakefile | -rw-r--r-- | 1.0 KB |
mksysmap | -rw-r--r-- | 1.3 KB |
mkuboot.sh | -rwxr-xr-x | 379 bytes |
mkversion | -rw-r--r-- | 74 bytes |
namespace.pl | -rwxr-xr-x | 13.1 KB |
patch-kernel | -rwxr-xr-x | 9.7 KB |
pnmtologo.c | -rw-r--r-- | 11.7 KB |
profile2linkerlist.pl | -rw-r--r-- | 378 bytes |
setlocalversion | -rwxr-xr-x | 1.5 KB |
show_delta | -rwxr-xr-x | 3.0 KB |
unifdef.c | -rw-r--r-- | 29.0 KB |
ver_linux | -rwxr-xr-x | 3.2 KB |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...