]> Pileus Git - ~andy/linux/blobdiff - kernel/cgroup.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/joern/logfs
[~andy/linux] / kernel / cgroup.c
index 87441fc75663836f698fb5990ac7c9b434b5b031..e2769e13980c49b2546d0bb2c6cef1e0065f6ca7 100644 (file)
@@ -27,7 +27,6 @@
  */
 
 #include <linux/cgroup.h>
-#include <linux/module.h>
 #include <linux/ctype.h>
 #include <linux/errno.h>
 #include <linux/fs.h>
@@ -2994,6 +2993,7 @@ static void cgroup_event_remove(struct work_struct *work)
 
        eventfd_ctx_put(event->eventfd);
        kfree(event);
+       dput(cgrp->dentry);
 }
 
 /*
@@ -3114,6 +3114,13 @@ static int cgroup_write_event_control(struct cgroup *cgrp, struct cftype *cft,
                goto fail;
        }
 
+       /*
+        * Events should be removed after rmdir of cgroup directory, but before
+        * destroying subsystem state objects. Let's take reference to cgroup
+        * directory dentry to do that.
+        */
+       dget(cgrp->dentry);
+
        spin_lock(&cgrp->event_list_lock);
        list_add(&event->list, &cgrp->event_list);
        spin_unlock(&cgrp->event_list_lock);