* [PATCH] cgroup: fix bogus kernel warnings when cgroup_create() failed
@ 2013-01-21 10:18 Li Zefan
2013-01-23 0:29 ` Tejun Heo
0 siblings, 1 reply; 2+ messages in thread
From: Li Zefan @ 2013-01-21 10:18 UTC (permalink / raw)
To: Tejun Heo; +Cc: LKML, Cgroups
If cgroup_create() failed and cgroup_destroy_locked() is called to
do cleanup, we'll see a bunch of warnings:
cgroup_addrm_files: failed to remove 2MB.limit_in_bytes, err=-2
cgroup_addrm_files: failed to remove 2MB.usage_in_bytes, err=-2
cgroup_addrm_files: failed to remove 2MB.max_usage_in_bytes, err=-2
cgroup_addrm_files: failed to remove 2MB.failcnt, err=-2
cgroup_addrm_files: failed to remove prioidx, err=-2
cgroup_addrm_files: failed to remove ifpriomap, err=-2
...
We failed to remove those files, because cgroup_create() has failed
before creating those cgroup files.
To fix this, we simply don't warn if cgroup_rm_file() can't find the
cft entry.
Signed-off-by: Li Zefan <lizefan@huawei.com>
---
kernel/cgroup.c | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index 77ab520..1db2438 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -928,13 +928,17 @@ static void remove_dir(struct dentry *d)
dput(parent);
}
-static int cgroup_rm_file(struct cgroup *cgrp, const struct cftype *cft)
+static void cgroup_rm_file(struct cgroup *cgrp, const struct cftype *cft)
{
struct cfent *cfe;
lockdep_assert_held(&cgrp->dentry->d_inode->i_mutex);
lockdep_assert_held(&cgroup_mutex);
+ /*
+ * If we're doing cleanup due to failure of cgroup_create(),
+ * the corresponding @cfe may not exist.
+ */
list_for_each_entry(cfe, &cgrp->files, node) {
struct dentry *d = cfe->dentry;
@@ -947,9 +951,8 @@ static int cgroup_rm_file(struct cgroup *cgrp, const struct cftype *cft)
list_del_init(&cfe->node);
dput(d);
- return 0;
+ break;
}
- return -ENOENT;
}
/**
@@ -2765,14 +2768,14 @@ static int cgroup_addrm_files(struct cgroup *cgrp, struct cgroup_subsys *subsys,
if ((cft->flags & CFTYPE_ONLY_ON_ROOT) && cgrp->parent)
continue;
- if (is_add)
+ if (is_add) {
err = cgroup_add_file(cgrp, subsys, cft);
- else
- err = cgroup_rm_file(cgrp, cft);
- if (err) {
- pr_warning("cgroup_addrm_files: failed to %s %s, err=%d\n",
- is_add ? "add" : "remove", cft->name, err);
+ if (err)
+ pr_warn("cgroup_addrm_files: failed to add %s, err=%d\n",
+ cft->name, err);
ret = err;
+ } else {
+ cgroup_rm_file(cgrp, cft);
}
}
return ret;
--
1.8.0.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] cgroup: fix bogus kernel warnings when cgroup_create() failed
2013-01-21 10:18 [PATCH] cgroup: fix bogus kernel warnings when cgroup_create() failed Li Zefan
@ 2013-01-23 0:29 ` Tejun Heo
0 siblings, 0 replies; 2+ messages in thread
From: Tejun Heo @ 2013-01-23 0:29 UTC (permalink / raw)
To: Li Zefan; +Cc: LKML, Cgroups
On Mon, Jan 21, 2013 at 06:18:33PM +0800, Li Zefan wrote:
> If cgroup_create() failed and cgroup_destroy_locked() is called to
> do cleanup, we'll see a bunch of warnings:
>
> cgroup_addrm_files: failed to remove 2MB.limit_in_bytes, err=-2
> cgroup_addrm_files: failed to remove 2MB.usage_in_bytes, err=-2
> cgroup_addrm_files: failed to remove 2MB.max_usage_in_bytes, err=-2
> cgroup_addrm_files: failed to remove 2MB.failcnt, err=-2
> cgroup_addrm_files: failed to remove prioidx, err=-2
> cgroup_addrm_files: failed to remove ifpriomap, err=-2
> ...
>
> We failed to remove those files, because cgroup_create() has failed
> before creating those cgroup files.
>
> To fix this, we simply don't warn if cgroup_rm_file() can't find the
> cft entry.
>
> Signed-off-by: Li Zefan <lizefan@huawei.com>
Applied to cgroup/for-3.9. Thanks!
--
tejun
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2013-01-23 0:36 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-21 10:18 [PATCH] cgroup: fix bogus kernel warnings when cgroup_create() failed Li Zefan
2013-01-23 0:29 ` Tejun Heo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).