From: Li Zefan <lizf@cn.fujitsu.com>
To: Vivek Goyal <vgoyal@redhat.com>
Cc: Gui Jianfeng <guijianfeng@cn.fujitsu.com>,
Jens Axboe <jens.axboe@oracle.com>,
Corrado Zoccolo <czoccolo@gmail.com>,
linux kernel mailing list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] cfq: Remove useless css reference get
Date: Thu, 17 Dec 2009 13:57:08 +0800 [thread overview]
Message-ID: <4B29C834.8090407@cn.fujitsu.com> (raw)
In-Reply-To: <20091216163941.GA2807@redhat.com>
于 2009年12月17日 00:39, Vivek Goyal 写道:
> On Wed, Dec 16, 2009 at 04:38:43PM +0800, Gui Jianfeng wrote:
>> There's no need to take css reference here, for the caller
>> has already called rcu_read_lock() to prevent cgroup from
>> being removed.
>>
>> Signed-off-by: Gui Jianfeng <guijianfeng@cn.fujitsu.com>
>> Reviewed-by: Li Zefan <lizf@cn.fujitsu.com>
>
> Hi Gui,
>
> How would an rcu lock protect against the possibility that blkiocg_destroy()
> has not already been called on another cpu? rcu lock will make sure that
> cgroup and blkio_cgroup object should still be around as long as I am
> holding rcu lock but will not protect against deletion path being executed
> on another cpu? So I don't want to end up in following situation.
>
> cpu1 cpu2
>
> rcu_read_lock()
> blkiocg_destroy()
>
> blkiocg_add_blkio_group()
> rcu_read_unlock()
>
> I don't want to add blkg object on a potentially dead blkio_cgroup object
> which will go away. Does this protection is provided by generic cgroup
> code where blkiocg_destroy() will not be called if I have got cgroup
> pointer under rcu lock?
>
> Currently we are deriving cgroup information from task context so task is
> still inside cgroup, so cgroup can't be deleted anyway. What if I was
> deriving cgroup information from bio, will taking css object reference be
> necessary in that case or just cgroup pointer under rcu lock is sufficient
> to preclude the race against cgroup deletion path?
>
We pass a cgroup ptr to cfq_find_alloc_cfqg(), which means the cgroup is
valid. As long as it's safe to access the cgroup, it's safe to access the
corresponding blkio_cgroup.
But if you still want blkio_cgroup to be valid after dropping rcu_read_lock
(or cgroup_mutex), you need to call css_get() first. Note you don't need
to call css_tryget(). css_tryget() is only needed in mem_cgroup, because
mem_cgroup is a bit special, in that a mem_cgroup can remain valid after
a cgroup is destroyed.
If a user tries to rmdir a cgroup when its css refcnt > 0, EBUSY will be
returned.
next prev parent reply other threads:[~2009-12-17 5:57 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-16 8:38 [PATCH] cfq: Remove useless css reference get Gui Jianfeng
2009-12-16 11:09 ` Corrado Zoccolo
2009-12-16 13:13 ` Jens Axboe
2009-12-16 16:39 ` Vivek Goyal
2009-12-16 18:38 ` Jens Axboe
2009-12-16 19:40 ` Vivek Goyal
2009-12-17 5:57 ` Li Zefan [this message]
2009-12-18 15:08 ` Vivek Goyal
2009-12-21 16:28 ` Vivek Goyal
2010-02-26 5:21 ` Gui Jianfeng
2010-02-26 7:56 ` Jens Axboe
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=4B29C834.8090407@cn.fujitsu.com \
--to=lizf@cn.fujitsu.com \
--cc=czoccolo@gmail.com \
--cc=guijianfeng@cn.fujitsu.com \
--cc=jens.axboe@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=vgoyal@redhat.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.