On Sun, Jan 4, 2026 at 6:04 PM Stephen Rothwell [off-list ref] wrote:
Hi all,
Today's linux-next merge of the bpf-next tree got a semantic conflict in:
include/linux/memcontrol.h
mm/memcontrol-v1.c
mm/memcontrol.c
between commit:
eb557e10dcac ("memcg: move mem_cgroup_usage memcontrol-v1.c")
from the mm-unstable tree and commit:
99430ab8b804 ("mm: introduce BPF kfuncs to access memcg statistics and events")
from the bpf-next tree producing this build failure:
mm/memcontrol-v1.c:430:22: error: static declaration of 'mem_cgroup_usage' follows non-static declaration
430 | static unsigned long mem_cgroup_usage(struct mem_cgroup *memcg, bool swap)
| ^~~~~~~~~~~~~~~~
In file included from mm/memcontrol-v1.c:3:
include/linux/memcontrol.h:953:15: note: previous declaration of 'mem_cgroup_usage' with type 'long unsigned int(struct mem_cgroup *, bool)' {aka 'long unsigned int(struct mem_cgroup *, _Bool)'}
953 | unsigned long mem_cgroup_usage(struct mem_cgroup *memcg, bool swap);
| ^~~~~~~~~~~~~~~~
I fixed it up (I reverted the mm-unstable tree commit) and can carry the
fix as necessary. This is now fixed as far as linux-next is concerned,
but any non trivial conflicts should be mentioned to your upstream
maintainer when your tree is submitted for merging. You may also want
to consider cooperating with the maintainer of the conflicting tree to
minimise any particularly complex conflicts.
Hey All,
what's the proper fix here?
Roman,
looks like adding mem_cgroup_usage() to include/linux/memcontrol.h
wasn't really necessary, since kfuncs don't use it anyway?
Should we just remove that line in bpf-next?
Just:
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
index 6a5d65487b70..229ac9835adb 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
@@ -950,7 +950,6 @@ static inline void mod_memcg_page_state(struct page *page,
}
unsigned long memcg_events(struct mem_cgroup *memcg, int event);
-unsigned long mem_cgroup_usage(struct mem_cgroup *memcg, bool swap);
unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx);
unsigned long memcg_page_state_output(struct mem_cgroup *memcg, int item);
bool memcg_stat_item_valid(int idx);
compiles fine.
If you agree pls send an official patch.