Re: [PATCH] mm: unhide vmstat_text definition for CONFIG_SMP

From: Michal Hocko
Date: Tue May 17 2016 - 03:06:05 EST


On Mon 16-05-16 15:36:56, Andrew Morton wrote:
> On Mon, 16 May 2016 16:23:33 +0200 Michal Hocko <mhocko@xxxxxxxxxx> wrote:
>
> > Andrew, I think that the following is more straightforward fix and
> > should be folded in to the patch which has introduced vmstat_refresh.
> > ---
> > >From b8dd18fb7df040e1bfe61aadde1d903589de15e4 Mon Sep 17 00:00:00 2001
> > From: Michal Hocko <mhocko@xxxxxxxx>
> > Date: Mon, 16 May 2016 16:19:53 +0200
> > Subject: [PATCH] mmotm: mm-proc-sys-vm-stat_refresh-to-force-vmstat-update-fix
> >
> > Arnd has reported:
> > In randconfig builds with sysfs, procfs and numa all disabled,
> > but SMP enabled, we now get a link error in the newly introduced
> > vmstat_refresh function:
> >
> > mm/built-in.o: In function `vmstat_refresh':
> > :(.text+0x15c78): undefined reference to `vmstat_text'
> >
> > vmstat_refresh is proc_fs specific so there is no reason to define it
> > when !CONFIG_PROC_FS.
>
> I already had this:
>
> From: Christoph Lameter <cl@xxxxxxxxx>
> Subject: Do not build vmstat_refresh if there is no procfs support
>
> It makes no sense to build functionality into the kernel that
> cannot be used and causes build issues.
>
> Link: http://lkml.kernel.org/r/alpine.DEB.2.20.1605111011260.9351@xxxxxxxxxxxxxxx
> Signed-off-by: Christoph Lameter <cl@xxxxxxxxx>
> Reported-by: Arnd Bergmann <arnd@xxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>

But this is broken:
http://lkml.kernel.org/r/20160516073144.GA23146@xxxxxxxxxxxxxx and
kbuild robot agrees
http://lkml.kernel.org/r/201605171333.ANqJcwpy%fengguang.wu@xxxxxxxxx
> ---
>
> mm/vmstat.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff -puN mm/vmstat.c~mm-proc-sys-vm-stat_refresh-to-force-vmstat-update-fix mm/vmstat.c
> --- a/mm/vmstat.c~mm-proc-sys-vm-stat_refresh-to-force-vmstat-update-fix
> +++ a/mm/vmstat.c
> @@ -1371,7 +1371,6 @@ static const struct file_operations proc
> .llseek = seq_lseek,
> .release = seq_release,
> };
> -#endif /* CONFIG_PROC_FS */
>
> #ifdef CONFIG_SMP
> static struct workqueue_struct *vmstat_wq;
> @@ -1436,7 +1435,10 @@ int vmstat_refresh(struct ctl_table *tab
> *lenp = 0;
> return 0;
> }
> +#endif /* CONFIG_SMP */
> +#endif /* CONFIG_PROC_FS */
>
> +#ifdef CONFIG_SMP
> static void vmstat_update(struct work_struct *w)
> {
> if (refresh_cpu_vm_stats(true)) {
> _

--
Michal Hocko
SUSE Labs