From: Li Zefan <lizf@cn.fujitsu.com>
To: Ben Blum <bblum@andrew.cmu.edu>
Cc: LKML <linux-kernel@vger.kernel.org>,
containers@lists.linux-foundation.org, akpm@linux-foundation.org,
menage@google.com
Subject: Re: [RFC] [PATCH 1/5] cgroups: revamp subsys array
Date: Wed, 09 Dec 2009 14:09:23 +0800 [thread overview]
Message-ID: <4B1F3F13.2080809@cn.fujitsu.com> (raw)
In-Reply-To: <4B1F3EB9.6080502@cn.fujitsu.com>
Fix "To" and "Cc"..
Li Zefan wrote:
> Ben Blum wrote:
>> On Tue, Dec 08, 2009 at 03:38:43PM +0800, Li Zefan wrote:
>>>> @@ -1291,6 +1324,7 @@ static int cgroup_get_sb(struct file_system_type *fs_type,
>>>> struct cgroupfs_root *new_root;
>>>>
>>>> /* First find the desired set of subsystems */
>>>> + down_read(&subsys_mutex);
>>> Hmm.. this can lead to deadlock. sget() returns success with sb->s_umount
>>> held, so here we have:
>>>
>>> down_read(&subsys_mutex);
>>>
>>> down_write(&sb->s_umount);
>>>
>>> On the other hand, sb->s_umount is held before calling kill_sb(),
>>> so when umounting we have:
>>>
>>> down_write(&sb->s_umount);
>>>
>>> down_read(&subsys_mutex);
>> Unless I'm gravely mistaken, you can't have deadlock on an rwsem when
>> it's being taken for reading in both cases? You would have to have at
>> least one of the cases being down_write.
>>
>
> lockdep will warn on this..
>
> And it can really lead to deadlock, though not so obivously:
>
> thread 1 thread 2 thread 3
> -------------------------------------------
> | read(A) write(B)
> |
> | write(A)
> |
> | read(A)
> |
> | write(B)
> |
>
> t3 is waiting for t1 to release the lock, then t2 tries to
> acquire A lock to read, but it has to wait because of t3,
> and t1 has to wait t2.
>
> Note: a read lock has to wait if a write lock is already
> waiting for the lock.
>
>> In fairness to readability, perhaps subsys_mutex should instead be
>> subsys_rwsem? It seemed to me to be that calling it "mutex" was
>> conventional anyway.
>>
next prev parent reply other threads:[~2009-12-09 6:16 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-04 8:53 [RFC] [PATCH 0/5] cgroups: support for module-loadable subsystems Ben Blum
2009-12-04 8:55 ` [RFC] [PATCH 1/5] cgroups: revamp subsys array Ben Blum
2009-12-08 7:38 ` Li Zefan
2009-12-09 5:50 ` Ben Blum
2009-12-09 6:07 ` Li Zefan
2009-12-09 6:09 ` Li Zefan [this message]
2009-12-09 8:27 ` Ben Blum
2009-12-10 3:18 ` Li Zefan
2009-12-10 5:19 ` Ben Blum
2009-12-10 6:00 ` Li Zefan
2009-12-10 6:13 ` Ben Blum
2009-12-09 8:36 ` Ben Blum
2009-12-04 8:56 ` [RFC] [PATCH 2/5] cgroups: subsystem module loading interface Ben Blum
2009-12-04 8:57 ` [RFC] [PATCH 3/5] cgroups: net_cls as module Ben Blum
2009-12-08 6:07 ` Li Zefan
2009-12-04 8:58 ` [RFC] [PATCH 4/5] cgroups: subsystem module unloading Ben Blum
2009-12-04 8:58 ` [RFC] [PATCH 5/5] cgroups: subsystem dependencies Ben Blum
2009-12-08 6:11 ` Li Zefan
2009-12-09 1:08 ` Ben Blum
2009-12-09 1:40 ` Li Zefan
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=4B1F3F13.2080809@cn.fujitsu.com \
--to=lizf@cn.fujitsu.com \
--cc=akpm@linux-foundation.org \
--cc=bblum@andrew.cmu.edu \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox