Re: [PATCH 09/10] cgroup: introduce struct cfent

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

On 03/20/2012 08:02 PM, Tejun Heo wrote:
On Tue, Mar 20, 2012 at 06:05:29PM +0400, Glauber Costa wrote:
On 03/17/2012 03:36 AM, Tejun Heo wrote:
+static void cgroup_clear_directory(struct dentry *dir)
+	struct cgroup *cgrp = __d_cgrp(dir);
+	while (!list_empty(&cgrp->files))
+		cgroup_rm_file(cgrp, NULL);
+	WARN_ON_ONCE(!list_empty(&dir->d_subdirs));

I am hitting this warning here under pretty much normal conditions.
You forgot to account for trivial directories like "."

I'll send a patch ontop of what you have.

Heh, yeah, I hit that yesterday too and was gonna look into that
today.  Is the patch coming? :)


I was about to send it together with my proposal for sock memcg, so I'm compile testing that under multiple config options just to be sure we're fine.

That's more or less what I have, see if you agree. I tried to keep the warning itself, because it is valuable...

>From 04604201411ab0a14fa1447072cd1b273d0774ed Mon Sep 17 00:00:00 2001
From: Glauber Costa <glommer@xxxxxxxxxxxxx>
Date: Tue, 20 Mar 2012 18:12:55 +0400
Subject: [PATCH] don't trigger warning when d_subdirs is not empty.

It is never empty at this point, because of the self references.
a better test is to see if any of them gets d_inode set.

Signed-off-by: Glauber Costa <glommer@xxxxxxxxxxxxx>
Signed-off-by: Tejun Heo <tj@xxxxxxxxxx>
 kernel/cgroup.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index cf7b298..b45a653 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -947,10 +947,16 @@ static int cgroup_rm_file(struct cgroup *cgrp, const struct cftype *cft)
 static void cgroup_clear_directory(struct dentry *dir)
 	struct cgroup *cgrp = __d_cgrp(dir);
+	struct list_head *child;
 	while (!list_empty(&cgrp->files))
 		cgroup_rm_file(cgrp, NULL);
-	WARN_ON_ONCE(!list_empty(&dir->d_subdirs));
+	list_for_each(child, &dir->d_subdirs) {
+		struct dentry *d;
+		d = list_entry(child, struct dentry, d_u.d_child);
+		WARN_ON_ONCE(d->d_inode);
+	}

Containers mailing list

[Cgroups]     [Netdev]     [Linux Wireless]     [Kernel Newbies]     [Memory]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Photo]     [Yosemite]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Find Someone Nice]     [Samba]     [Video 4 Linux]     [Computer Add-ons]

Powered by Linux