Johannes Weiner
23751be009
memcg: fix hierarchical oom locking
...
Commit 79dfdaccd1 ("memcg: make oom_lock 0 and 1 based rather than
counter") tried to oom lock the hierarchy and roll back upon
encountering an already locked memcg.
The code is confused when it comes to detecting a locked memcg, though,
so it would fail and rollback after locking one memcg and encountering
an unlocked second one.
The result is that oom-locking hierarchies fails unconditionally and
that every oom killer invocation simply goes to sleep on the oom
waitqueue forever. The tasks practically hang forever without anyone
intervening, possibly holding locks that trip up unrelated tasks, too.
Signed-off-by: Johannes Weiner <jweiner@redhat.com>
Acked-by: Michal Hocko <mhocko@suse.cz>
Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-08-25 16:25:34 -07:00
..
backing-dev.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/writeback
2011-07-26 10:39:54 -07:00
bootmem.c
bounce.c
cleancache.c
mm: cleancache core ops functions and config
2011-05-26 10:01:36 -06:00
compaction.c
mm: compaction: abort compaction if too many pages are isolated and caller is asynchronous V2
2011-06-15 20:04:02 -07:00
debug-pagealloc.c
dmapool.c
devres: fix possible use after free
2011-07-25 20:57:14 -07:00
fadvise.c
failslab.c
fault-injection: add ability to export fault_attr in arbitrary directory
2011-08-03 14:25:20 -10:00
filemap.c
mm: clarify the radix_tree exceptional cases
2011-08-03 14:25:24 -10:00
filemap_xip.c
mm: Convert i_mmap_lock to a mutex
2011-05-25 08:39:18 -07:00
fremap.c
mm: don't access vm_flags as 'int'
2011-05-26 09:20:31 -07:00
highmem.c
mm: make HASHED_PAGE_VIRTUAL page_address' struct page argument const.
2011-08-17 13:00:20 -07:00
huge_memory.c
mm/huge_memory.c: minor lock simplification in __khugepaged_exit
2011-07-25 20:57:09 -07:00
hugetlb.c
mm: hugetlb: fix coding style issues
2011-07-25 20:57:09 -07:00
hwpoison-inject.c
init-mm.c
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
internal.h
mm: nommu: sort mm->mmap list properly
2011-05-25 08:39:05 -07:00
Kconfig
mm Kconfig typo: cleancacne -> cleancache
2011-06-10 14:47:52 +02:00
Kconfig.debug
kmemcheck.c
kmemleak-test.c
kmemleak.c
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
ksm.c
ksm: fix NULL pointer dereference in scan_get_next_rmap_item()
2011-06-15 20:04:02 -07:00
maccess.c
maccess,probe_kernel: Make write/read src const void *
2011-05-25 19:56:23 -04:00
madvise.c
fs: kill i_alloc_sem
2011-07-20 20:47:46 -04:00
Makefile
mm: cleancache core ops functions and config
2011-05-26 10:01:36 -06:00
memblock.c
mm/memblock.c: avoid abuse of RED_INACTIVE
2011-07-25 20:57:09 -07:00
memcontrol.c
memcg: fix hierarchical oom locking
2011-08-25 16:25:34 -07:00
memory-failure.c
HWPoison: add memory_failure_queue()
2011-08-03 11:15:58 -04:00
memory.c
mm/futex: fix futex writes on archs with SW tracking of dirty & young
2011-07-25 20:57:11 -07:00
memory_hotplug.c
mm: extend memory hotplug API to allow memory hotplug in virtual machines
2011-07-25 20:57:08 -07:00
mempolicy.c
cpusets: randomize node rotor used in cpuset_mem_spread_node()
2011-07-26 16:49:43 -07:00
mempool.c
migrate.c
migrate: don't account swapcache as shmem
2011-06-16 15:01:24 -07:00
mincore.c
mm: clarify the radix_tree exceptional cases
2011-08-03 14:25:24 -10:00
mlock.c
mm: don't access vm_flags as 'int'
2011-05-26 09:20:31 -07:00
mm_init.c
mmap.c
mmap: fix and tidy up overcommit page arithmetic
2011-07-25 20:57:09 -07:00
mmu_context.c
mmu_notifier.c
mmzone.c
mprotect.c
mremap.c
mm: Convert i_mmap_lock to a mutex
2011-05-25 08:39:18 -07:00
msync.c
nobootmem.c
memblock/nobootmem: remove unneeded code from alloc_bootmem_node_high()
2011-05-25 08:39:31 -07:00
nommu.c
mmap: fix and tidy up overcommit page arithmetic
2011-07-25 20:57:09 -07:00
oom_kill.c
oom: task->mm == NULL doesn't mean the memory was freed
2011-08-01 15:24:12 -10:00
page-writeback.c
squeeze max-pause area and drop pass-good area
2011-08-19 22:42:07 +08:00
page_alloc.c
fault-injection: add ability to export fault_attr in arbitrary directory
2011-08-03 14:25:20 -10:00
page_cgroup.c
mm/page_cgroup.c: simplify code by using SECTION_ALIGN_UP() and SECTION_ALIGN_DOWN() macros
2011-07-25 20:57:09 -07:00
page_io.c
page_isolation.c
pagewalk.c
pagewalk: fix code comment for THP
2011-07-25 20:57:09 -07:00
percpu-km.c
percpu-vm.c
percpu.c
Merge branch 'for-2.6.40' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2011-05-24 11:53:42 -07:00
pgtable-generic.c
prio_tree.c
sanitize <linux/prefetch.h> usage
2011-05-20 12:50:29 -07:00
quicklist.c
readahead.c
readahead: readahead page allocations are OK to fail
2011-05-25 08:39:25 -07:00
rmap.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/writeback
2011-07-26 10:39:54 -07:00
shmem.c
mm: clarify the radix_tree exceptional cases
2011-08-03 14:25:24 -10:00
slab.c
slab, lockdep: Annotate the locks before using them
2011-08-04 10:18:00 +02:00
slob.c
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
slub.c
slub: Fix partial count comparison confusion
2011-08-09 21:12:31 +03:00
sparse-vmemmap.c
sparse.c
mm: make some struct page's const
2011-07-25 20:57:07 -07:00
swap.c
mm: batch activate_page() to reduce lock contention
2011-05-25 08:39:37 -07:00
swap_state.c
swapfile.c
mm: let swap use exceptional entries
2011-08-03 14:25:22 -10:00
thrash.c
mm: swap-token: add a comment for priority aging
2011-07-25 20:57:08 -07:00
truncate.c
mm: a few small updates for radix-swap
2011-08-03 14:25:24 -10:00
util.c
mm: nommu: sort mm->mmap list properly
2011-05-25 08:39:05 -07:00
vmalloc.c
mm: fix wrong vmap address calculations with odd NR_CPUS values
2011-08-14 12:32:52 -07:00
vmscan.c
vmscan: clear ZONE_CONGESTED for zone with good watermark
2011-08-25 16:25:34 -07:00
vmstat.c
mm, mem-hotplug: update pcp->stat_threshold when memory hotplug occur
2011-05-25 08:39:09 -07:00