This will make sure number of sections marked as present won't be changed
in sparse_init(), so that for_each_present_section_nr() can iterate
each of them. This is preparation for later fix.

Signed-off-by: Baoquan He <b...@redhat.com>
---
 mm/sparse-vmemmap.c |  1 -
 mm/sparse.c         | 15 ++++++++++++---
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c
index 17acf01791fa..315bea91e276 100644
--- a/mm/sparse-vmemmap.c
+++ b/mm/sparse-vmemmap.c
@@ -324,7 +324,6 @@ void __init sparse_mem_maps_populate_node(struct page 
**map_map,
                ms = __nr_to_section(pnum);
                pr_err("%s: sparsemem memory map backing failed some memory 
will not be available\n",
                       __func__);
-               ms->section_mem_map = 0;
        }
 
        if (vmemmap_buf_start) {
diff --git a/mm/sparse.c b/mm/sparse.c
index 2609aba121e8..54eba92b72a1 100644
--- a/mm/sparse.c
+++ b/mm/sparse.c
@@ -478,7 +478,6 @@ void __init sparse_mem_maps_populate_node(struct page 
**map_map,
                ms = __nr_to_section(pnum);
                pr_err("%s: sparsemem memory map backing failed some memory 
will not be available\n",
                       __func__);
-               ms->section_mem_map = 0;
        }
 }
 #endif /* !CONFIG_SPARSEMEM_VMEMMAP */
@@ -610,17 +609,27 @@ void __init sparse_init(void)
 #endif
 
        for_each_present_section_nr(0, pnum) {
+               struct mem_section *ms;
+               ms = __nr_to_section(pnum);
                usemap = usemap_map[pnum];
-               if (!usemap)
+               if (!usemap) {
+#ifdef CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER
+                       ms->section_mem_map = 0;
+#endif
                        continue;
+               }
 
 #ifdef CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER
                map = map_map[pnum];
 #else
                map = sparse_early_mem_map_alloc(pnum);
 #endif
-               if (!map)
+               if (!map) {
+#ifdef CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER
+                       ms->section_mem_map = 0;
+#endif
                        continue;
+               }
 
                sparse_init_one_section(__nr_to_section(pnum), pnum, map,
                                                                usemap);
-- 
2.13.6

Reply via email to