[PATCH 4/9] cgroup: split namespace into separate header

Christian Brauner posted 9 patches 2 weeks, 1 day ago
[PATCH 4/9] cgroup: split namespace into separate header
Posted by Christian Brauner 2 weeks, 1 day ago
We have dedicated headers for all namespace types. Add one for the
cgroup namespace as well. Now it's consistent for all namespace types
and easy to figure out what to include.

Signed-off-by: Christian Brauner <brauner@kernel.org>
---
 include/linux/cgroup.h           | 51 +-----------------------------------
 include/linux/cgroup_namespace.h | 56 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 57 insertions(+), 50 deletions(-)

diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
index 9ca25346f7cb..5156fed8cbc3 100644
--- a/include/linux/cgroup.h
+++ b/include/linux/cgroup.h
@@ -27,6 +27,7 @@
 #include <linux/kernel_stat.h>
 
 #include <linux/cgroup-defs.h>
+#include <linux/cgroup_namespace.h>
 
 struct kernel_clone_args;
 
@@ -783,56 +784,6 @@ static inline void cgroup_sk_free(struct sock_cgroup_data *skcd) {}
 
 #endif	/* CONFIG_CGROUP_DATA */
 
-struct cgroup_namespace {
-	struct ns_common	ns;
-	struct user_namespace	*user_ns;
-	struct ucounts		*ucounts;
-	struct css_set          *root_cset;
-};
-
-extern struct cgroup_namespace init_cgroup_ns;
-
-#ifdef CONFIG_CGROUPS
-
-static inline struct cgroup_namespace *to_cg_ns(struct ns_common *ns)
-{
-	return container_of(ns, struct cgroup_namespace, ns);
-}
-
-void free_cgroup_ns(struct cgroup_namespace *ns);
-
-struct cgroup_namespace *copy_cgroup_ns(unsigned long flags,
-					struct user_namespace *user_ns,
-					struct cgroup_namespace *old_ns);
-
-int cgroup_path_ns(struct cgroup *cgrp, char *buf, size_t buflen,
-		   struct cgroup_namespace *ns);
-
-static inline void get_cgroup_ns(struct cgroup_namespace *ns)
-{
-	refcount_inc(&ns->ns.count);
-}
-
-static inline void put_cgroup_ns(struct cgroup_namespace *ns)
-{
-	if (refcount_dec_and_test(&ns->ns.count))
-		free_cgroup_ns(ns);
-}
-
-#else /* !CONFIG_CGROUPS */
-
-static inline void free_cgroup_ns(struct cgroup_namespace *ns) { }
-static inline struct cgroup_namespace *
-copy_cgroup_ns(unsigned long flags, struct user_namespace *user_ns,
-	       struct cgroup_namespace *old_ns)
-{
-	return old_ns;
-}
-
-static inline void get_cgroup_ns(struct cgroup_namespace *ns) { }
-static inline void put_cgroup_ns(struct cgroup_namespace *ns) { }
-
-#endif /* !CONFIG_CGROUPS */
 
 #ifdef CONFIG_CGROUPS
 
diff --git a/include/linux/cgroup_namespace.h b/include/linux/cgroup_namespace.h
new file mode 100644
index 000000000000..c02bb76c5e32
--- /dev/null
+++ b/include/linux/cgroup_namespace.h
@@ -0,0 +1,56 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _LINUX_CGROUP_NAMESPACE_H
+#define _LINUX_CGROUP_NAMESPACE_H
+
+struct cgroup_namespace {
+	struct ns_common	ns;
+	struct user_namespace	*user_ns;
+	struct ucounts		*ucounts;
+	struct css_set          *root_cset;
+};
+
+extern struct cgroup_namespace init_cgroup_ns;
+
+#ifdef CONFIG_CGROUPS
+
+static inline struct cgroup_namespace *to_cg_ns(struct ns_common *ns)
+{
+	return container_of(ns, struct cgroup_namespace, ns);
+}
+
+void free_cgroup_ns(struct cgroup_namespace *ns);
+
+struct cgroup_namespace *copy_cgroup_ns(unsigned long flags,
+					struct user_namespace *user_ns,
+					struct cgroup_namespace *old_ns);
+
+int cgroup_path_ns(struct cgroup *cgrp, char *buf, size_t buflen,
+		   struct cgroup_namespace *ns);
+
+static inline void get_cgroup_ns(struct cgroup_namespace *ns)
+{
+	refcount_inc(&ns->ns.count);
+}
+
+static inline void put_cgroup_ns(struct cgroup_namespace *ns)
+{
+	if (refcount_dec_and_test(&ns->ns.count))
+		free_cgroup_ns(ns);
+}
+
+#else /* !CONFIG_CGROUPS */
+
+static inline void free_cgroup_ns(struct cgroup_namespace *ns) { }
+static inline struct cgroup_namespace *
+copy_cgroup_ns(unsigned long flags, struct user_namespace *user_ns,
+	       struct cgroup_namespace *old_ns)
+{
+	return old_ns;
+}
+
+static inline void get_cgroup_ns(struct cgroup_namespace *ns) { }
+static inline void put_cgroup_ns(struct cgroup_namespace *ns) { }
+
+#endif /* !CONFIG_CGROUPS */
+
+#endif /* _LINUX_CGROUP_NAMESPACE_H */

-- 
2.47.3
Re: [PATCH 4/9] cgroup: split namespace into separate header
Posted by Jan Kara 2 weeks ago
On Wed 17-09-25 12:28:03, Christian Brauner wrote:
> We have dedicated headers for all namespace types. Add one for the
> cgroup namespace as well. Now it's consistent for all namespace types
> and easy to figure out what to include.
> 
> Signed-off-by: Christian Brauner <brauner@kernel.org>

Looks good. Feel free to add:

Reviewed-by: Jan Kara <jack@suse.cz>

								Honza

> ---
>  include/linux/cgroup.h           | 51 +-----------------------------------
>  include/linux/cgroup_namespace.h | 56 ++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 57 insertions(+), 50 deletions(-)
> 
> diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
> index 9ca25346f7cb..5156fed8cbc3 100644
> --- a/include/linux/cgroup.h
> +++ b/include/linux/cgroup.h
> @@ -27,6 +27,7 @@
>  #include <linux/kernel_stat.h>
>  
>  #include <linux/cgroup-defs.h>
> +#include <linux/cgroup_namespace.h>
>  
>  struct kernel_clone_args;
>  
> @@ -783,56 +784,6 @@ static inline void cgroup_sk_free(struct sock_cgroup_data *skcd) {}
>  
>  #endif	/* CONFIG_CGROUP_DATA */
>  
> -struct cgroup_namespace {
> -	struct ns_common	ns;
> -	struct user_namespace	*user_ns;
> -	struct ucounts		*ucounts;
> -	struct css_set          *root_cset;
> -};
> -
> -extern struct cgroup_namespace init_cgroup_ns;
> -
> -#ifdef CONFIG_CGROUPS
> -
> -static inline struct cgroup_namespace *to_cg_ns(struct ns_common *ns)
> -{
> -	return container_of(ns, struct cgroup_namespace, ns);
> -}
> -
> -void free_cgroup_ns(struct cgroup_namespace *ns);
> -
> -struct cgroup_namespace *copy_cgroup_ns(unsigned long flags,
> -					struct user_namespace *user_ns,
> -					struct cgroup_namespace *old_ns);
> -
> -int cgroup_path_ns(struct cgroup *cgrp, char *buf, size_t buflen,
> -		   struct cgroup_namespace *ns);
> -
> -static inline void get_cgroup_ns(struct cgroup_namespace *ns)
> -{
> -	refcount_inc(&ns->ns.count);
> -}
> -
> -static inline void put_cgroup_ns(struct cgroup_namespace *ns)
> -{
> -	if (refcount_dec_and_test(&ns->ns.count))
> -		free_cgroup_ns(ns);
> -}
> -
> -#else /* !CONFIG_CGROUPS */
> -
> -static inline void free_cgroup_ns(struct cgroup_namespace *ns) { }
> -static inline struct cgroup_namespace *
> -copy_cgroup_ns(unsigned long flags, struct user_namespace *user_ns,
> -	       struct cgroup_namespace *old_ns)
> -{
> -	return old_ns;
> -}
> -
> -static inline void get_cgroup_ns(struct cgroup_namespace *ns) { }
> -static inline void put_cgroup_ns(struct cgroup_namespace *ns) { }
> -
> -#endif /* !CONFIG_CGROUPS */
>  
>  #ifdef CONFIG_CGROUPS
>  
> diff --git a/include/linux/cgroup_namespace.h b/include/linux/cgroup_namespace.h
> new file mode 100644
> index 000000000000..c02bb76c5e32
> --- /dev/null
> +++ b/include/linux/cgroup_namespace.h
> @@ -0,0 +1,56 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#ifndef _LINUX_CGROUP_NAMESPACE_H
> +#define _LINUX_CGROUP_NAMESPACE_H
> +
> +struct cgroup_namespace {
> +	struct ns_common	ns;
> +	struct user_namespace	*user_ns;
> +	struct ucounts		*ucounts;
> +	struct css_set          *root_cset;
> +};
> +
> +extern struct cgroup_namespace init_cgroup_ns;
> +
> +#ifdef CONFIG_CGROUPS
> +
> +static inline struct cgroup_namespace *to_cg_ns(struct ns_common *ns)
> +{
> +	return container_of(ns, struct cgroup_namespace, ns);
> +}
> +
> +void free_cgroup_ns(struct cgroup_namespace *ns);
> +
> +struct cgroup_namespace *copy_cgroup_ns(unsigned long flags,
> +					struct user_namespace *user_ns,
> +					struct cgroup_namespace *old_ns);
> +
> +int cgroup_path_ns(struct cgroup *cgrp, char *buf, size_t buflen,
> +		   struct cgroup_namespace *ns);
> +
> +static inline void get_cgroup_ns(struct cgroup_namespace *ns)
> +{
> +	refcount_inc(&ns->ns.count);
> +}
> +
> +static inline void put_cgroup_ns(struct cgroup_namespace *ns)
> +{
> +	if (refcount_dec_and_test(&ns->ns.count))
> +		free_cgroup_ns(ns);
> +}
> +
> +#else /* !CONFIG_CGROUPS */
> +
> +static inline void free_cgroup_ns(struct cgroup_namespace *ns) { }
> +static inline struct cgroup_namespace *
> +copy_cgroup_ns(unsigned long flags, struct user_namespace *user_ns,
> +	       struct cgroup_namespace *old_ns)
> +{
> +	return old_ns;
> +}
> +
> +static inline void get_cgroup_ns(struct cgroup_namespace *ns) { }
> +static inline void put_cgroup_ns(struct cgroup_namespace *ns) { }
> +
> +#endif /* !CONFIG_CGROUPS */
> +
> +#endif /* _LINUX_CGROUP_NAMESPACE_H */
> 
> -- 
> 2.47.3
> 
-- 
Jan Kara <jack@suse.com>
SUSE Labs, CR
Re: [PATCH 4/9] cgroup: split namespace into separate header
Posted by Tejun Heo 2 weeks ago
On Wed, Sep 17, 2025 at 12:28:03PM +0200, Christian Brauner wrote:
> We have dedicated headers for all namespace types. Add one for the
> cgroup namespace as well. Now it's consistent for all namespace types
> and easy to figure out what to include.
> 
> Signed-off-by: Christian Brauner <brauner@kernel.org>

Acked-by: Tejun Heo <tj@kernel.org>

Please feel free to route with other changes. If you want it to go through
the cgroup tree, please let me know.

Thanks.

-- 
tejun