cgroup: cgroup refcnt functions should be exported when CONFIG_DEBUG_CGROUP_REF
authorTejun Heo <tj@kernel.org>
Mon, 31 Oct 2022 17:12:13 +0000 (07:12 -1000)
committerTejun Heo <tj@kernel.org>
Mon, 31 Oct 2022 17:12:13 +0000 (07:12 -1000)
6ab428604f72 ("cgroup: Implement DEBUG_CGROUP_REF") added a config option
which forces cgroup refcnt functions to be not inlined so that they can be
kprobed for debugging. However, it forgot export them when the config is
enabled breaking modules which make use of css reference counting.

Fix it by adding CGROUP_REF_EXPORT() macro to cgroup_refcnt.h which is
defined to EXPORT_SYMBOL_GPL when CONFIG_DEBUG_CGROUP_REF is set.

Signed-off-by: Tejun Heo <tj@kernel.org>
Fixes: 6ab428604f72 ("cgroup: Implement DEBUG_CGROUP_REF")
include/linux/cgroup.h
include/linux/cgroup_refcnt.h
kernel/cgroup/cgroup.c

index 5c9c07a447060526467b421caa35cdd47953271c..c8441090ca4c93f21e4455b1846801f9db379a79 100644 (file)
@@ -318,6 +318,7 @@ void css_put(struct cgroup_subsys_state *css);
 void css_put_many(struct cgroup_subsys_state *css, unsigned int n);
 #else
 #define CGROUP_REF_FN_ATTRS    static inline
+#define CGROUP_REF_EXPORT(fn)
 #include <linux/cgroup_refcnt.h>
 #endif
 
index 1aa89295dac04bdb320870df1974789f2d9555bf..2eea0a69ecfcbc20e860b2a92cef6cf78130b69a 100644 (file)
@@ -10,6 +10,7 @@ void css_get(struct cgroup_subsys_state *css)
        if (!(css->flags & CSS_NO_REF))
                percpu_ref_get(&css->refcnt);
 }
+CGROUP_REF_EXPORT(css_get)
 
 /**
  * css_get_many - obtain references on the specified css
@@ -24,6 +25,7 @@ void css_get_many(struct cgroup_subsys_state *css, unsigned int n)
        if (!(css->flags & CSS_NO_REF))
                percpu_ref_get_many(&css->refcnt, n);
 }
+CGROUP_REF_EXPORT(css_get_many)
 
 /**
  * css_tryget - try to obtain a reference on the specified css
@@ -43,6 +45,7 @@ bool css_tryget(struct cgroup_subsys_state *css)
                return percpu_ref_tryget(&css->refcnt);
        return true;
 }
+CGROUP_REF_EXPORT(css_tryget)
 
 /**
  * css_tryget_online - try to obtain a reference on the specified css if online
@@ -61,6 +64,7 @@ bool css_tryget_online(struct cgroup_subsys_state *css)
                return percpu_ref_tryget_live(&css->refcnt);
        return true;
 }
+CGROUP_REF_EXPORT(css_tryget_online)
 
 /**
  * css_put - put a css reference
@@ -74,6 +78,7 @@ void css_put(struct cgroup_subsys_state *css)
        if (!(css->flags & CSS_NO_REF))
                percpu_ref_put(&css->refcnt);
 }
+CGROUP_REF_EXPORT(css_put)
 
 /**
  * css_put_many - put css references
@@ -88,3 +93,4 @@ void css_put_many(struct cgroup_subsys_state *css, unsigned int n)
        if (!(css->flags & CSS_NO_REF))
                percpu_ref_put_many(&css->refcnt, n);
 }
+CGROUP_REF_EXPORT(css_put_many)
index f786c4c973a0e9e1ccd91569054cae7f921e3328..f2743a476190b85000aa713332fbb7e60b699828 100644 (file)
@@ -250,6 +250,7 @@ static int cgroup_addrm_files(struct cgroup_subsys_state *css,
 
 #ifdef CONFIG_DEBUG_CGROUP_REF
 #define CGROUP_REF_FN_ATTRS    noinline
+#define CGROUP_REF_EXPORT(fn)  EXPORT_SYMBOL_GPL(fn);
 #include <linux/cgroup_refcnt.h>
 #endif