diff options
author | Tejun Heo <tj@kernel.org> | 2016-12-27 20:49:09 +0100 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2016-12-27 20:49:09 +0100 |
commit | dcfe149b9f45aaf89bb95e8b314210da626417d9 (patch) | |
tree | 7529523e033eb20fdcda9e8ea8561f9cee860433 /kernel/cgroup/cgroup-internal.h | |
parent | cgroup: rename functions for consistency (diff) | |
download | linux-dcfe149b9f45aaf89bb95e8b314210da626417d9.tar.xz linux-dcfe149b9f45aaf89bb95e8b314210da626417d9.zip |
cgroup: move namespace code to kernel/cgroup/namespace.c
get/put_css_set() get exposed in cgroup-internal.h in the process.
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Acked-by: Zefan Li <lizefan@huawei.com>
Diffstat (limited to 'kernel/cgroup/cgroup-internal.h')
-rw-r--r-- | kernel/cgroup/cgroup-internal.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/kernel/cgroup/cgroup-internal.h b/kernel/cgroup/cgroup-internal.h index a890c92cb688..589b0e7013ec 100644 --- a/kernel/cgroup/cgroup-internal.h +++ b/kernel/cgroup/cgroup-internal.h @@ -65,6 +65,33 @@ static inline bool notify_on_release(const struct cgroup *cgrp) return test_bit(CGRP_NOTIFY_ON_RELEASE, &cgrp->flags); } +void put_css_set_locked(struct css_set *cset); + +static inline void put_css_set(struct css_set *cset) +{ + unsigned long flags; + + /* + * Ensure that the refcount doesn't hit zero while any readers + * can see it. Similar to atomic_dec_and_lock(), but for an + * rwlock + */ + if (atomic_add_unless(&cset->refcount, -1, 1)) + return; + + spin_lock_irqsave(&css_set_lock, flags); + put_css_set_locked(cset); + spin_unlock_irqrestore(&css_set_lock, flags); +} + +/* + * refcounted get/put for css_set objects + */ +static inline void get_css_set(struct css_set *cset) +{ + atomic_inc(&cset->refcount); +} + bool cgroup_ssid_enabled(int ssid); bool cgroup_on_dfl(const struct cgroup *cgrp); @@ -108,6 +135,11 @@ int cgroup_show_path(struct seq_file *sf, struct kernfs_node *kf_node, struct kernfs_root *kf_root); /* + * namespace.c + */ +extern const struct proc_ns_operations cgroupns_operations; + +/* * cgroup-v1.c */ extern struct cftype cgroup1_base_files[]; |