static int cgrp_css_online(struct cgroup_subsys_state *css) { struct cgroup_cls_state *cs = css_cls_state(css); struct cgroup_cls_state *parent = css_cls_state(css->parent); if (parent) cs->classid = parent->classid; return 0; }
static void cgrp_attach(struct cgroup_taskset *tset) { struct cgroup_subsys_state *css; cgroup_taskset_first(tset, &css); update_classid(css, (void *)(unsigned long)css_cls_state(css)->classid); }
static void cgrp_attach(struct cgroup_taskset *tset) { struct cgroup_subsys_state *css; struct task_struct *p; cgroup_taskset_for_each(p, css, tset) { task_lock(p); iterate_fd(p->files, 0, update_classid_sock, (void *)(unsigned long)css_cls_state(css)->classid); task_unlock(p); }
static int write_classid(struct cgroup_subsys_state *css, struct cftype *cft, u64 value) { struct cgroup_cls_state *cs = css_cls_state(css); cgroup_sk_alloc_disable(); cs->classid = (u32)value; update_classid(css, (void *)(unsigned long)cs->classid); return 0; }
static void cgrp_css_free(struct cgroup_subsys_state *css) { kfree(css_cls_state(css)); }
struct cgroup_cls_state *task_cls_state(struct task_struct *p) { return css_cls_state(task_css(p, net_cls_cgrp_id)); }
struct cgroup_cls_state *task_cls_state(struct task_struct *p) { return css_cls_state(task_css_check(p, net_cls_cgrp_id, rcu_read_lock_bh_held())); }
static u64 read_classid(struct cgroup_subsys_state *css, struct cftype *cft) { return css_cls_state(css)->classid; }