Wei Yang
505bc9f389
mm/page_alloc.c: fix calculation of pgdat->nr_zones
...
[ Upstream commit 8f416836c0d50b198cad1225132e5abebf8980dc ]
init_currently_empty_zone() will adjust pgdat->nr_zones and set it to
'zone_idx(zone) + 1' unconditionally. This is correct in the normal
case, while not exact in hot-plug situation.
This function is used in two places:
* free_area_init_core()
* move_pfn_range_to_zone()
In the first case, we are sure zone index increase monotonically. While
in the second one, this is under users control.
One way to reproduce this is:
----------------------------
1. create a virtual machine with empty node1
-m 4G,slots=32,maxmem=32G \
-smp 4,maxcpus=8 \
-numa node,nodeid=0,mem=4G,cpus=0-3 \
-numa node,nodeid=1,mem=0G,cpus=4-7
2. hot-add cpu 3-7
cpu-add [3-7]
2. hot-add memory to nod1
object_add memory-backend-ram,id=ram0,size=1G
device_add pc-dimm,id=dimm0,memdev=ram0,node=1
3. online memory with following order
echo online_movable > memory47/state
echo online > memory40/state
After this, node1 will have its nr_zones equals to (ZONE_NORMAL + 1)
instead of (ZONE_MOVABLE + 1).
Michal said:
"Having an incorrect nr_zones might result in all sorts of problems
which would be quite hard to debug (e.g. reclaim not considering the
movable zone). I do not expect many users would suffer from this it
but still this is trivial and obviously right thing to do so
backporting to the stable tree shouldn't be harmful (last famous
words)"
Link: http://lkml.kernel.org/r/20181117022022.9956-1-richard.weiyang@gmail.com
Fixes: f1dd2cd13c ("mm, memory_hotplug: do not associate hotadded memory to zones until online")
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Reviewed-by: Oscar Salvador <osalvador@suse.de>
Cc: Anshuman Khandual <anshuman.khandual@arm.com>
Cc: Dave Hansen <dave.hansen@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2018-12-17 09:24:40 +01:00
..
kasan
kernel/memremap, kasan: make ZONE_DEVICE with work with KASAN
2018-08-17 16:20:30 -07:00
backing-dev.c
blkcg: delay blkg destruction until after writeback has finished
2018-08-31 14:48:56 -06:00
balloon_compaction.c
virtio_balloon: fix deadlock on OOM
2017-11-14 23:57:38 +02:00
bootmem.c
docs/mm: bootmem: add overview documentation
2018-08-02 12:17:27 -06:00
cleancache.c
mm: use octal not symbolic permissions
2018-06-15 07:55:25 +09:00
cma.c
mm/cma: remove unsupported gfp_mask parameter from cma_alloc()
2018-08-17 16:20:32 -07:00
cma.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
cma_debug.c
mm/cma: remove unsupported gfp_mask parameter from cma_alloc()
2018-08-17 16:20:32 -07:00
compaction.c
mm: use octal not symbolic permissions
2018-06-15 07:55:25 +09:00
debug.c
mm: get rid of vmacache_flush_all() entirely
2018-09-13 15:18:04 -10:00
debug_page_ref.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
dmapool.c
mm: use octal not symbolic permissions
2018-06-15 07:55:25 +09:00
early_ioremap.c
mm/early_ioremap: Fix boot hang with earlyprintk=efi,keep
2017-12-11 14:54:44 +01:00
fadvise.c
vfs: implement readahead(2) using POSIX_FADV_WILLNEED
2018-08-30 20:01:32 +02:00
failslab.c
mm: use octal not symbolic permissions
2018-06-15 07:55:25 +09:00
filemap.c
mm: use new return type vm_fault_t
2018-06-07 17:34:36 -07:00
frame_vector.c
mm/frame_vector.c: release a semaphore in 'get_vaddr_frames()'
2017-12-14 16:00:48 -08:00
frontswap.c
mm: use octal not symbolic permissions
2018-06-15 07:55:25 +09:00
gup.c
mm: Change return type int to vm_fault_t for fault handlers
2018-08-23 18:48:44 -07:00
gup_benchmark.c
mm/gup_benchmark: fix unsigned comparison to zero in __gup_benchmark_ioctl
2018-10-05 16:32:04 -07:00
highmem.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
hmm.c
mm/hmm: fix race between hmm_mirror_unregister() and mmu_notifier callback
2018-11-13 11:08:47 -08:00
huge_memory.c
mm/huge_memory: fix lockdep complaint on 32-bit i_size_read()
2018-12-05 19:31:57 +01:00
hugetlb.c
userfaultfd: use ENOENT instead of EFAULT if the atomic copy user fails
2018-12-08 12:59:08 +01:00
hugetlb_cgroup.c
mm: rename page_counter's count/limit into usage/max
2018-06-07 17:34:35 -07:00
hwpoison-inject.c
mm/memory_failure: Remove unused trapno from memory_failure
2018-01-23 12:17:42 -06:00
init-mm.c
mm: Allocate the mm_cpumask (mm->cpu_bitmap[]) dynamically based on nr_cpu_ids
2018-07-17 09:35:30 +02:00
internal.h
mm: Change return type int to vm_fault_t for fault handlers
2018-08-23 18:48:44 -07:00
interval_tree.c
mm/interval_tree.c: use vma_pages() helper
2018-01-31 17:18:37 -08:00
Kconfig
mm: disable deferred struct page for 32-bit arches
2018-09-20 22:01:11 +02:00
Kconfig.debug
mm: clarify CONFIG_PAGE_POISONING and usage
2018-08-22 10:52:44 -07:00
khugepaged.c
mm/khugepaged: collapse_shmem() do not crash on Compound
2018-12-05 19:31:57 +01:00
kmemleak-test.c
mm: convert printk(KERN_<LEVEL> to pr_<level>
2016-03-17 15:09:34 -07:00
kmemleak.c
kmemleak: always register debugfs file
2018-09-04 16:45:02 -07:00
ksm.c
include/linux/compiler*.h: make compiler-*.h mutually exclusive
2018-08-22 17:31:34 -07:00
list_lru.c
mm/list_lru: introduce list_lru_shrink_walk_irq()
2018-08-17 16:20:32 -07:00
maccess.c
mm: docs: fix parameter names mismatch
2018-02-06 18:32:48 -08:00
madvise.c
mm: madvise(MADV_DODUMP): allow hugetlbfs pages
2018-10-05 16:32:05 -07:00
Makefile
vfs: implement readahead(2) using POSIX_FADV_WILLNEED
2018-08-30 20:01:32 +02:00
memblock.c
mm/memblock.c: replace u64 with phys_addr_t where appropriate
2018-08-17 16:20:30 -07:00
memcontrol.c
mm: memcontrol: print proper OOM header when no eligible victim left
2018-09-04 16:45:02 -07:00
memfd.c
alloc_file(): switch to passing O_... flags instead of FMODE_... mode
2018-07-12 10:02:57 -04:00
memory-failure.c
libnvdimm-for-4.19_dax-memory-failure
2018-08-25 18:43:59 -07:00
memory.c
mm/memory.c: recheck page table entry with page table lock held
2018-12-01 09:37:28 +01:00
memory_hotplug.c
memory_hotplug: cond_resched in __remove_pages
2018-11-21 09:19:18 +01:00
mempolicy.c
mm: thp: relax __GFP_THISNODE for MADV_HUGEPAGE mappings
2018-11-21 09:19:18 +01:00
mempool.c
mm/mempool.c: add missing parameter description
2018-08-22 10:52:44 -07:00
memtest.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
migrate.c
Merge branch 'akpm'
2018-10-05 16:33:03 -07:00
mincore.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
mlock.c
dax: remove VM_MIXEDMAP for fsdax and device dax
2018-08-17 16:20:27 -07:00
mm_init.c
mm: access zone->node via zone_to_nid() and zone_set_nid()
2018-08-22 10:52:45 -07:00
mmap.c
mm/mmap.c: don't clobber partially overlapping VMA with MAP_FIXED_NOREPLACE
2018-10-13 09:31:02 +02:00
mmu_context.c
sched/headers: Prepare to move the task_lock()/unlock() APIs to <linux/sched/task.h>
2017-03-02 08:42:38 +01:00
mmu_notifier.c
mm, oom: distinguish blockable mode for mmu notifiers
2018-08-22 10:52:44 -07:00
mmzone.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
mprotect.c
x86/speculation/l1tf: Disallow non privileged high MMIO PROT_NONE mappings
2018-06-20 19:10:01 +02:00
mremap.c
mremap: properly flush TLB before releasing the page
2018-10-18 11:30:52 +02:00
msync.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
nobootmem.c
mm/memblock: add a name for memblock flags enumeration
2018-08-02 12:17:27 -06:00
nommu.c
mm: provide a fallback for PAGE_KERNEL_EXEC for architectures
2018-08-17 16:20:29 -07:00
oom_kill.c
mm, oom: fix missing tlb_finish_mmu() in __oom_reap_task_mm().
2018-09-04 16:45:02 -07:00
page-writeback.c
notifier: Remove notifier header file wherever not used
2018-08-30 12:56:40 +02:00
page_alloc.c
mm/page_alloc.c: fix calculation of pgdat->nr_zones
2018-12-17 09:24:40 +01:00
page_counter.c
memcg: introduce memory.min
2018-06-07 17:34:36 -07:00
page_ext.c
mm/page_ext.c: constify lookup_page_ext() argument
2018-08-17 16:20:28 -07:00
page_idle.c
mm: use octal not symbolic permissions
2018-06-15 07:55:25 +09:00
page_io.c
swap,blkcg: issue swap io with the appropriate context
2018-07-09 09:07:54 -06:00
page_isolation.c
mm, migrate: remove reason argument from new_page_t
2018-04-11 10:28:32 -07:00
page_owner.c
mm: use octal not symbolic permissions
2018-06-15 07:55:25 +09:00
page_poison.c
mm/page_poison.c: make early_page_poison_param() __init
2018-04-05 21:36:26 -07:00
page_vma_mapped.c
mm/rmap: map_pte() was not handling private ZONE_DEVICE page properly
2018-11-13 11:08:46 -08:00
pagewalk.c
mm: kernel-doc: add missing parameter descriptions
2018-04-05 21:36:27 -07:00
percpu-internal.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
percpu-km.c
percpu: allow select gfp to be passed to underlying allocators
2018-02-18 05:33:01 -08:00
percpu-stats.c
treewide: Use array_size() in vmalloc()
2018-06-12 16:19:22 -07:00
percpu-vm.c
percpu: allow select gfp to be passed to underlying allocators
2018-02-18 05:33:01 -08:00
percpu.c
percpu: stop leaking bitmap metadata blocks
2018-10-07 14:50:12 -07:00
pgtable-generic.c
mm: do not lose dirty and accessed bits in pmdp_invalidate()
2018-01-31 17:18:38 -08:00
process_vm_access.c
mm: docs: add blank lines to silence sphinx "Unexpected indentation" errors
2018-02-06 18:32:48 -08:00
quicklist.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
readahead.c
vfs: implement readahead(2) using POSIX_FADV_WILLNEED
2018-08-30 20:01:32 +02:00
rmap.c
mm/huge_memory: rename freeze_page() to unmap_page()
2018-12-05 19:31:57 +01:00
rodata_test.c
mm: fix RODATA_TEST failure "rodata_test: test data was not read only"
2017-10-03 17:54:24 -07:00
shmem.c
userfaultfd: shmem: UFFDIO_COPY: set the page dirty if VM_WRITE is not set
2018-12-08 12:59:08 +01:00
slab.c
mm: don't warn about large allocations for slab
2018-12-01 09:37:28 +01:00
slab.h
mm: introduce CONFIG_MEMCG_KMEM as combination of CONFIG_MEMCG && !CONFIG_SLOB
2018-08-17 16:20:30 -07:00
slab_common.c
mm: don't warn about large allocations for slab
2018-12-01 09:37:28 +01:00
slob.c
slab: __GFP_ZERO is incompatible with a constructor
2018-06-07 17:34:34 -07:00
slub.c
notifier: Remove notifier header file wherever not used
2018-08-30 12:56:40 +02:00
sparse-vmemmap.c
mm/sparse: delete old sparse_init and enable new one
2018-08-17 16:20:32 -07:00
sparse.c
mm/sparse: delete old sparse_init and enable new one
2018-08-17 16:20:32 -07:00
swap.c
mm: introduce MEMORY_DEVICE_FS_DAX and CONFIG_DEV_PAGEMAP_OPS
2018-05-22 06:59:39 -07:00
swap_cgroup.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
swap_slots.c
mm, swap, get_swap_pages: use entry_size instead of cluster in parameter
2018-08-22 10:52:44 -07:00
swap_state.c
treewide: kvzalloc() -> kvcalloc()
2018-06-12 16:19:22 -07:00
swapfile.c
mm/swapfile.c: use kvzalloc for swap_info_struct allocation
2018-11-21 09:19:24 +01:00
truncate.c
mm: cleancache: fix corruption on missed inode invalidation
2018-12-05 19:32:13 +01:00
usercopy.c
usercopy: Allow boot cmdline disabling of hardening
2018-07-04 08:04:52 -07:00
userfaultfd.c
userfaultfd: shmem: add i_size checks
2018-12-08 12:59:08 +01:00
util.c
mm/util.c: improve kvfree() kerneldoc
2018-09-04 16:45:02 -07:00
vmacache.c
mm: get rid of vmacache_flush_all() entirely
2018-09-13 15:18:04 -10:00
vmalloc.c
mm: provide a fallback for PAGE_KERNEL_EXEC for architectures
2018-08-17 16:20:29 -07:00
vmpressure.c
mm/vmpressure.c: convert to use match_string() helper
2018-06-07 17:34:36 -07:00
vmscan.c
mm/vmscan.c: fix int overflow in callers of do_shrink_slab()
2018-10-05 16:32:05 -07:00
vmstat.c
mm/vmstat.c: skip NR_TLB_REMOTE_FLUSH* properly
2018-10-05 16:32:05 -07:00
workingset.c
mm/list_lru: introduce list_lru_shrink_walk_irq()
2018-08-17 16:20:32 -07:00
z3fold.c
z3fold: fix possible reclaim races
2018-12-01 09:37:33 +01:00
zbud.c
mm: docs: fix parameter names mismatch
2018-02-06 18:32:48 -08:00
zpool.c
mm/zpool.c: zpool_evictable: fix mismatch in parameter name and kernel-doc
2018-02-21 15:35:43 -08:00
zsmalloc.c
mm/zsmalloc.c: make several functions and a struct static
2018-08-17 16:20:30 -07:00
zswap.c
zswap: re-check zswap_is_full() after do zswap_shrink()
2018-07-26 19:38:03 -07:00