Re: [PATCH] memory hotplug: run lru_add_drain_all() on each cpu

KAMEZAWA Hiroyuki
2008-12-04T00:32:34Z

On Wed, 03 Dec 2008 14:16:07 -0800
Dave Hansen <dave@linux.vnet.ibm.com> wrote:
> > This let us run
> > into the BUG_ON(!PageBuddy(page)) in __offline_isolated_pages() during
> > memory hotplug stress test on s390. The page in question was still on the
> > pcp list, because of a race with lru_add_drain_all() and drain_all_pages()
> > on different cpus.
> >
> > This is fixed with this patch by adding CONFIG_MEMORY_HOTREMOVE to the
> > lru_add_drain_all() #ifdef, to let it run on each cpu.
>
> This doesn't seem right to me. CONFIG_MEMORY_HOTREMOVE doesn't change
> the layout of the LRUs, unlike NUMA or UNEVICTABLE_LRU. So, I think
> this bug is more due to the hotremove code mis-expecting behavior out of
> lru_add_drain_all().
>
How about

#ifdef CONFIG_SMP

#else..

#endif

rather than

-#if defined(CONFIG_NUMA) || defined(CONFIG_UNEVICTABLE_LRU)
+#if defined(CONFIG_NUMA) || defined(CONFIG_UNEVICTABLE_LRU) || \
+ defined(CONFIG_MEMORY_HOTREMOVE)
...

thanks,
-Kame