diff options
Diffstat (limited to 'kernel/cgroup.c')
-rw-r--r-- | kernel/cgroup.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index bf30076664ca..940aced4ed00 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
@@ -1035,6 +1035,11 @@ static void cgroup_get(struct cgroup *cgrp) | |||
1035 | css_get(&cgrp->self); | 1035 | css_get(&cgrp->self); |
1036 | } | 1036 | } |
1037 | 1037 | ||
1038 | static bool cgroup_tryget(struct cgroup *cgrp) | ||
1039 | { | ||
1040 | return css_tryget(&cgrp->self); | ||
1041 | } | ||
1042 | |||
1038 | static void cgroup_put(struct cgroup *cgrp) | 1043 | static void cgroup_put(struct cgroup *cgrp) |
1039 | { | 1044 | { |
1040 | css_put(&cgrp->self); | 1045 | css_put(&cgrp->self); |
@@ -1147,7 +1152,8 @@ static struct cgroup *cgroup_kn_lock_live(struct kernfs_node *kn) | |||
1147 | * protection against removal. Ensure @cgrp stays accessible and | 1152 | * protection against removal. Ensure @cgrp stays accessible and |
1148 | * break the active_ref protection. | 1153 | * break the active_ref protection. |
1149 | */ | 1154 | */ |
1150 | cgroup_get(cgrp); | 1155 | if (!cgroup_tryget(cgrp)) |
1156 | return NULL; | ||
1151 | kernfs_break_active_protection(kn); | 1157 | kernfs_break_active_protection(kn); |
1152 | 1158 | ||
1153 | mutex_lock(&cgroup_mutex); | 1159 | mutex_lock(&cgroup_mutex); |