On Tue, Jan 07, 2025 at 11:51:41AM +0800, Kenny Cheng wrote: > The function 'task_in_memcg_oom' returns a 'struct mem_cgroup *' type. > If the compiler does not inline this function, a compile error occurs, > as shown below: > > ./include/linux/memcontrol.h:961:9: error: incompatible pointer to > integer conversion returning 'struct mem_cgroup *' from a function with > result type 'unsigned char' [-Wint-conversion] What does inlining have to do with anything? And where has unsigned char come from in that? > This patch avoids the implicit type conversion by ensuring the return > type is correct. > > Signed-off-by: Kenny Cheng <chao.shun.cheng.tw@xxxxxxxxx> > --- > include/linux/memcontrol.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h > index 5502aa8e138e..47acf1e4f5a7 100644 > --- a/include/linux/memcontrol.h > +++ b/include/linux/memcontrol.h > @@ -1826,7 +1826,7 @@ bool mem_cgroup_oom_synchronize(bool wait); > > static inline bool task_in_memcg_oom(struct task_struct *p) > { > - return p->memcg_in_oom; > + return !!p->memcg_in_oom; > } That makes no sense. Do you have bool (or _Bool) defined or typedefed to unsigned char somewhere? If so, that's the bug that needs to be fixed.