From: Lai Jiangshan <laijs@cn.fujitsu.com>
To: Andrew Morton <akpm@linux-foundation.org>,
Paul Menage <menage@google.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Linux Containers <containers@lists.linux-foundation.org>
Subject: [PATCH] cgroups: defer free css_set
Date: Fri, 21 Nov 2008 16:49:31 +0800 [thread overview]
Message-ID: <4926761B.2060608@cn.fujitsu.com> (raw)
we free css_set when refcnt became 0 immediately(except cgroup_attach_task()).
I will destroy the data which read side maybe still access it.
this patch use call_rcu() to defer free css_set
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
---
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
index 1164963..22901ff 100644
--- a/include/linux/cgroup.h
+++ b/include/linux/cgroup.h
@@ -178,6 +178,8 @@ struct css_set {
*/
struct list_head cg_links;
+ struct rcu_head rcu;
+
/*
* Set of subsystem states, one for each subsystem. This array
* is immutable after creation apart from the init_css_set
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index 358e775..ddc10ac 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -252,6 +252,11 @@ static void unlink_css_set(struct css_set *cg)
}
}
+static void rcu_free_css_set(struct rcu_head *head)
+{
+ kfree(container_of(head, struct css_set, rcu));
+}
+
static void __put_css_set(struct css_set *cg, int taskexit)
{
int i;
@@ -281,7 +286,7 @@ static void __put_css_set(struct css_set *cg, int taskexit)
}
}
rcu_read_unlock();
- kfree(cg);
+ call_rcu(&cg->rcu, rcu_free_css_set);
}
/*
@@ -1267,7 +1277,6 @@ int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
ss->attach(ss, cgrp, oldcgrp, tsk);
}
set_bit(CGRP_RELEASABLE, &oldcgrp->flags);
- synchronize_rcu();
put_css_set(cg);
return 0;
}
next reply other threads:[~2008-11-21 8:54 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-21 8:49 Lai Jiangshan [this message]
[not found] ` <4926761B.2060608-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2008-11-21 18:28 ` [PATCH] cgroups: defer free css_set Paul Menage
2008-11-21 18:28 ` Paul Menage
-- strict thread matches above, loose matches on Subject: below --
2008-11-21 8:49 Lai Jiangshan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4926761B.2060608@cn.fujitsu.com \
--to=laijs@cn.fujitsu.com \
--cc=akpm@linux-foundation.org \
--cc=containers@lists.linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=menage@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.