linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] vmscan: fix memcg_kmem build failure
@ 2019-07-08 12:41 Arnd Bergmann
  2019-07-08 13:27 ` Arnd Bergmann
  0 siblings, 1 reply; 2+ messages in thread
From: Arnd Bergmann @ 2019-07-08 12:41 UTC (permalink / raw)
  Cc: Arnd Bergmann, Yang Shi, Kirill A. Shutemov, Kirill Tkhai,
	Johannes Weiner, Michal Hocko, Hugh Dickins, Shakeel Butt,
	David Rientjes, Andrew Morton, Stephen Rothwell, Roman Gushchin,
	Chris Down, Yafang Shao, Mel Gorman, linux-kernel, linux-mm

When CONFIG_MEMCG_KMEM is disabled, we get a build failure
for calling a nonexisting memcg_expand_shrinker_maps():

mm/vmscan.c:220:7: error: implicit declaration of function 'memcg_expand_shrinker_maps' [-Werror,-Wimplicit-function-declaration]
                if (memcg_expand_shrinker_maps(id)) {
                    ^
mm/vmscan.c:220:7: error: this function declaration is not a prototype [-Werror,-Wstrict-prototypes]
mm/vmscan.c:608:56: error: no member named 'shrinker_map' in 'struct mem_cgroup_per_node'
        map = rcu_dereference_protected(memcg->nodeinfo[nid]->shrinker_map,
                                        ~~~~~~~~~~~~~~~~~~~~  ^
include/linux/rcupdate.h:498:31: note: expanded from macro 'rcu_dereference_protected'
        __rcu_dereference_protected((p), (c), __rcu)
                                     ^
include/linux/rcupdate.h:321:12: note: expanded from macro '__rcu_dereference_protected'
        ((typeof(*p) __force __kernel *)(p)); \
                  ^
mm/vmscan.c:608:6: error: assigning to 'struct memcg_shrinker_map *' from incompatible type 'void'
        map = rcu_dereference_protected(memcg->nodeinfo[nid]->shrinker_map,

and another issue trying to access invalid struct fields:

mm/vmscan.c:608:56: error: no member named 'shrinker_map' in 'struct mem_cgroup_per_node'
        map = rcu_dereference_protected(memcg->nodeinfo[nid]->shrinker_map,
                                        ~~~~~~~~~~~~~~~~~~~~  ^
include/linux/rcupdate.h:498:31: note: expanded from macro 'rcu_dereference_protected'
        __rcu_dereference_protected((p), (c), __rcu)
                                     ^
include/linux/rcupdate.h:321:12: note: expanded from macro '__rcu_dereference_protected'
        ((typeof(*p) __force __kernel *)(p)); \
                  ^
mm/vmscan.c:608:6: error: assigning to 'struct memcg_shrinker_map *' from incompatible type 'void'
        map = rcu_dereference_protected(memcg->nodeinfo[nid]->shrinker_map,

Add a dummy definition for memcg_expand_shrinker_maps() that always fails,
and hide the obviously nonworking shrink_slab_memcg() function.

Fixes: 8236f517d69e ("mm: shrinker: make shrinker not depend on memcg kmem")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
No idea what the intended behavior is supposed to be for this case.
Rather than failing, should we actually provide that function?
Or maybe a more elaborate change is needed?
---
 include/linux/memcontrol.h | 5 +++++
 mm/vmscan.c                | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
index 5901a90f58eb..6b15e2066fc7 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
@@ -1407,6 +1407,11 @@ static inline void memcg_put_cache_ids(void)
 {
 }
 
+static inline int memcg_expand_shrinker_maps(int new_id)
+{
+	return -ENOMEM;
+}
+
 static inline void memcg_set_shrinker_bit(struct mem_cgroup *memcg,
 					  int nid, int shrinker_id) { }
 #endif /* CONFIG_MEMCG_KMEM */
diff --git a/mm/vmscan.c b/mm/vmscan.c
index a0301edd8d03..323a9c50c0fe 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -591,7 +591,7 @@ static unsigned long do_shrink_slab(struct shrink_control *shrinkctl,
 	return freed;
 }
 
-#ifdef CONFIG_MEMCG
+#ifdef CONFIG_MEMCG_KMEM
 static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid,
 			struct mem_cgroup *memcg, int priority)
 {
-- 
2.20.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] vmscan: fix memcg_kmem build failure
  2019-07-08 12:41 [PATCH] vmscan: fix memcg_kmem build failure Arnd Bergmann
@ 2019-07-08 13:27 ` Arnd Bergmann
  0 siblings, 0 replies; 2+ messages in thread
From: Arnd Bergmann @ 2019-07-08 13:27 UTC (permalink / raw)
  Cc: Yang Shi, Kirill A. Shutemov, Kirill Tkhai, Johannes Weiner,
	Michal Hocko, Hugh Dickins, Shakeel Butt, David Rientjes,
	Andrew Morton, Stephen Rothwell, Roman Gushchin, Chris Down,
	Yafang Shao, Mel Gorman, Linux Kernel Mailing List, Linux-MM

On Mon, Jul 8, 2019 at 2:42 PM Arnd Bergmann <arnd@arndb.de> wrote:
>
> When CONFIG_MEMCG_KMEM is disabled, we get a build failure
> for calling a nonexisting memcg_expand_shrinker_maps():
>
> mm/vmscan.c:220:7: error: implicit declaration of function 'memcg_expand_shrinker_maps' [-Werror,-Wimplicit-function-declaration]
>                 if (memcg_expand_shrinker_maps(id)) {
>                     ^

I see now that a fix for this is already in today's linux-next, please ignore
my patch.

      Arnd


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-07-08 13:28 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-08 12:41 [PATCH] vmscan: fix memcg_kmem build failure Arnd Bergmann
2019-07-08 13:27 ` Arnd Bergmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).