mirror of
https://github.com/torvalds/linux.git
synced 2026-10-26 20:46:02 +01:00
Explicitly instantiate the memory attributes xarray with XA_FLAGS_ACCOUNT
to ensure that all allocations are accounted to the memcg. Frustratingly,
memory allocations done in the "fastpath" do not honor the passed in gfp,
even for an explicit xa_reserve(). Only the rare, slow path __xas_nomem()
honors the original gfp. E.g.
xa_reserve(..., GFP_KERNEL_ACCOUNT)
|
-> ...
|
-> __xa_cmpxchg_raw()
|
-> xas_store() <== does not take @gfp
|
-> xas_create()
|
-> xas_alloc()
The bug was confirmed by observing that a process in a cgroup limited to
256 MiB grew radix_tree_node slab by ~512 MiB while its memory.current
stayed near 0.
Fixes:
|
||
|---|---|---|
| .. | ||
| async_pf.c | ||
| async_pf.h | ||
| binary_stats.c | ||
| coalesced_mmio.c | ||
| coalesced_mmio.h | ||
| dirty_ring.c | ||
| eventfd.c | ||
| guest_memfd.c | ||
| guest_memfd.h | ||
| irqchip.c | ||
| Kconfig | ||
| kvm_main.c | ||
| kvm_mm.h | ||
| Makefile.kvm | ||
| pfncache.c | ||
| vfio.c | ||
| vfio.h | ||