]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blobdiff - net/sched/cls_cgroup.c
cgroup: add css_parent()
[mirror_ubuntu-hirsute-kernel.git] / net / sched / cls_cgroup.c
index 3a294eb98d6178733edc49c98da4069ccf643a39..9e6b75e5efce4261cb46e5fe9160526564f74cd8 100644 (file)
 #include <net/sock.h>
 #include <net/cls_cgroup.h>
 
+static inline struct cgroup_cls_state *css_cls_state(struct cgroup_subsys_state *css)
+{
+       return css ? container_of(css, struct cgroup_cls_state, css) : NULL;
+}
+
 static inline struct cgroup_cls_state *cgrp_cls_state(struct cgroup *cgrp)
 {
-       return container_of(cgroup_subsys_state(cgrp, net_cls_subsys_id),
-                           struct cgroup_cls_state, css);
+       return css_cls_state(cgroup_css(cgrp, net_cls_subsys_id));
 }
 
 static inline struct cgroup_cls_state *task_cls_state(struct task_struct *p)
 {
-       return container_of(task_subsys_state(p, net_cls_subsys_id),
-                           struct cgroup_cls_state, css);
+       return css_cls_state(task_css(p, net_cls_subsys_id));
 }
 
 static struct cgroup_subsys_state *cgrp_css_alloc(struct cgroup *cgrp)
@@ -47,9 +50,11 @@ static struct cgroup_subsys_state *cgrp_css_alloc(struct cgroup *cgrp)
 
 static int cgrp_css_online(struct cgroup *cgrp)
 {
-       if (cgrp->parent)
-               cgrp_cls_state(cgrp)->classid =
-                       cgrp_cls_state(cgrp->parent)->classid;
+       struct cgroup_cls_state *cs = cgrp_cls_state(cgrp);
+       struct cgroup_cls_state *parent = css_cls_state(css_parent(&cs->css));
+
+       if (parent)
+               cs->classid = parent->classid;
        return 0;
 }