diff options
author | David Hildenbrand <david@redhat.com> | 2019-09-23 18:36:08 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-09-24 18:54:09 -0400 |
commit | ca9a46f8a4f00c83dcc6c787ae659d117433cbd2 (patch) | |
tree | d900e2cd09f5323d4e09d547cd10035e04d92d57 | |
parent | bd02cc01d342b43618c86e25552150f7a7e09080 (diff) |
mm/memory_hotplug: online_pages cannot be 0 in online_pages()
walk_system_ram_range() will fail with -EINVAL in case
online_pages_range() was never called (== no resource applicable in the
range). Otherwise, we will always call online_pages_range() with nr_pages
> 0 and, therefore, have online_pages > 0.
Remove that special handling.
Link: http://lkml.kernel.org/r/20190814154109.3448-6-david@redhat.com
Signed-off-by: David Hildenbrand <david@redhat.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Oscar Salvador <osalvador@suse.de>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Pavel Tatashin <pasha.tatashin@soleen.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Arun KS <arunks@codeaurora.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Nadav Amit <namit@vmware.com>
Cc: Wei Yang <richardw.yang@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | mm/memory_hotplug.c | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index aa54e15ea830..49f7bf91c25a 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c | |||
@@ -853,6 +853,7 @@ int __ref online_pages(unsigned long pfn, unsigned long nr_pages, int online_typ | |||
853 | ret = walk_system_ram_range(pfn, nr_pages, &onlined_pages, | 853 | ret = walk_system_ram_range(pfn, nr_pages, &onlined_pages, |
854 | online_pages_range); | 854 | online_pages_range); |
855 | if (ret) { | 855 | if (ret) { |
856 | /* not a single memory resource was applicable */ | ||
856 | if (need_zonelists_rebuild) | 857 | if (need_zonelists_rebuild) |
857 | zone_pcp_reset(zone); | 858 | zone_pcp_reset(zone); |
858 | goto failed_addition; | 859 | goto failed_addition; |
@@ -866,27 +867,22 @@ int __ref online_pages(unsigned long pfn, unsigned long nr_pages, int online_typ | |||
866 | 867 | ||
867 | shuffle_zone(zone); | 868 | shuffle_zone(zone); |
868 | 869 | ||
869 | if (onlined_pages) { | 870 | node_states_set_node(nid, &arg); |
870 | node_states_set_node(nid, &arg); | 871 | if (need_zonelists_rebuild) |
871 | if (need_zonelists_rebuild) | 872 | build_all_zonelists(NULL); |
872 | build_all_zonelists(NULL); | 873 | else |
873 | else | 874 | zone_pcp_update(zone); |
874 | zone_pcp_update(zone); | ||
875 | } | ||
876 | 875 | ||
877 | init_per_zone_wmark_min(); | 876 | init_per_zone_wmark_min(); |
878 | 877 | ||
879 | if (onlined_pages) { | 878 | kswapd_run(nid); |
880 | kswapd_run(nid); | 879 | kcompactd_run(nid); |
881 | kcompactd_run(nid); | ||
882 | } | ||
883 | 880 | ||
884 | vm_total_pages = nr_free_pagecache_pages(); | 881 | vm_total_pages = nr_free_pagecache_pages(); |
885 | 882 | ||
886 | writeback_set_ratelimit(); | 883 | writeback_set_ratelimit(); |
887 | 884 | ||
888 | if (onlined_pages) | 885 | memory_notify(MEM_ONLINE, &arg); |
889 | memory_notify(MEM_ONLINE, &arg); | ||
890 | mem_hotplug_done(); | 886 | mem_hotplug_done(); |
891 | return 0; | 887 | return 0; |
892 | 888 | ||