aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/cgroup.c
diff options
context:
space:
mode:
authorTodd Poynor <toddpoynor@google.com>2013-03-13 17:35:08 -0700
committerTodd Poynor <toddpoynor@google.com>2013-03-13 17:35:08 -0700
commit1249d25539343d1a7fe361c8d40be7a5df5b0216 (patch)
tree770c9a33604bb00c62f44d780aefab27e4eb9379 /kernel/cgroup.c
parent4aad13d07babf68c1d0d37ff1e5f797573c4fd2a (diff)
parent0b203ab4aacdb6e6dfb8c277aa290f0a02428e6f (diff)
downloadkernel_samsung_tuna-1249d25539343d1a7fe361c8d40be7a5df5b0216.zip
kernel_samsung_tuna-1249d25539343d1a7fe361c8d40be7a5df5b0216.tar.gz
kernel_samsung_tuna-1249d25539343d1a7fe361c8d40be7a5df5b0216.tar.bz2
Merge branch 'android-3.0' into android-omap-3.0
Diffstat (limited to 'kernel/cgroup.c')
-rw-r--r--kernel/cgroup.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index 3948f0a..460aa1b 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -366,10 +366,18 @@ static void free_css_set_work(struct work_struct *work)
struct cgroup *cgrp = link->cgrp;
list_del(&link->cg_link_list);
list_del(&link->cgrp_link_list);
+ /*
+ * We may not be holding cgroup_mutex, and if cgrp->count is
+ * dropped to 0 the cgroup can be destroyed at any time, hence
+ * rcu_read_lock is used to keep it alive.
+ */
+ rcu_read_lock();
if (atomic_dec_and_test(&cgrp->count)) {
check_for_release(cgrp);
cgroup_wakeup_rmdir_waiter(cgrp);
}
+ rcu_read_unlock();
+
kfree(link);
}
write_unlock(&css_set_lock);