Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

ns: add reference count helpers

Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Christian Brauner <brauner@kernel.org>

+35 -10
+35 -10
include/linux/ns_common.h
··· 43 43 int __ns_common_init(struct ns_common *ns, const struct proc_ns_operations *ops, int inum); 44 44 void __ns_common_free(struct ns_common *ns); 45 45 46 - #define to_ns_common(__ns) \ 47 - _Generic((__ns), \ 48 - struct cgroup_namespace *: &(__ns)->ns, \ 49 - struct ipc_namespace *: &(__ns)->ns, \ 50 - struct mnt_namespace *: &(__ns)->ns, \ 51 - struct net *: &(__ns)->ns, \ 52 - struct pid_namespace *: &(__ns)->ns, \ 53 - struct time_namespace *: &(__ns)->ns, \ 54 - struct user_namespace *: &(__ns)->ns, \ 55 - struct uts_namespace *: &(__ns)->ns) 46 + #define to_ns_common(__ns) \ 47 + _Generic((__ns), \ 48 + struct cgroup_namespace *: &(__ns)->ns, \ 49 + const struct cgroup_namespace *: &(__ns)->ns, \ 50 + struct ipc_namespace *: &(__ns)->ns, \ 51 + const struct ipc_namespace *: &(__ns)->ns, \ 52 + struct mnt_namespace *: &(__ns)->ns, \ 53 + const struct mnt_namespace *: &(__ns)->ns, \ 54 + struct net *: &(__ns)->ns, \ 55 + const struct net *: &(__ns)->ns, \ 56 + struct pid_namespace *: &(__ns)->ns, \ 57 + const struct pid_namespace *: &(__ns)->ns, \ 58 + struct time_namespace *: &(__ns)->ns, \ 59 + const struct time_namespace *: &(__ns)->ns, \ 60 + struct user_namespace *: &(__ns)->ns, \ 61 + const struct user_namespace *: &(__ns)->ns, \ 62 + struct uts_namespace *: &(__ns)->ns, \ 63 + const struct uts_namespace *: &(__ns)->ns) 56 64 57 65 #define ns_init_inum(__ns) \ 58 66 _Generic((__ns), \ ··· 90 82 #define ns_common_init_inum(__ns, __ops, __inum) __ns_common_init(to_ns_common(__ns), __ops, __inum) 91 83 92 84 #define ns_common_free(__ns) __ns_common_free(to_ns_common((__ns))) 85 + 86 + static __always_inline __must_check bool __ns_ref_put(struct ns_common *ns) 87 + { 88 + return refcount_dec_and_test(&ns->count); 89 + } 90 + 91 + static __always_inline __must_check bool __ns_ref_get(struct ns_common *ns) 92 + { 93 + return refcount_inc_not_zero(&ns->count); 94 + } 95 + 96 + #define ns_ref_read(__ns) refcount_read(&to_ns_common((__ns))->count) 97 + #define ns_ref_inc(__ns) refcount_inc(&to_ns_common((__ns))->count) 98 + #define ns_ref_get(__ns) __ns_ref_get(to_ns_common((__ns))) 99 + #define ns_ref_put(__ns) __ns_ref_put(to_ns_common((__ns))) 100 + #define ns_ref_put_and_lock(__ns, __lock) \ 101 + refcount_dec_and_lock(&to_ns_common((__ns))->count, (__lock)) 93 102 94 103 #endif