From: Louis Rilling <Louis.Rilling@kerlabs.com>
To: Joel.Becker@oracle.com
Cc: ocfs2-devel@oss.oracle.com, linux-kernel@vger.kernel.org
Subject: [Ocfs2-devel] [RFC][PATCH 4/4] configfs: Make multiple default_group destructions lockdep friendly
Date: Fri, 23 May 2008 18:44:58 +0200 [thread overview]
Message-ID: <4836F48A.70008@kerlabs.com> (raw)
In-Reply-To: <20080522114947.927196541@kerlabs.com>
Louis Rilling a ?crit :
> When destroying a config_group having multiple (nested or not) default groups,
> lockdep raises a warning because multiple locks of class I_MUTEX_NORMAL are
> taken in configfs_detach_prep().
>
> This patch makes such default group destructions lockdep-friendly by increasing
> the i_mutex sub-class from I_MUTEX_CHILD + 1 onwards for each default group
> locked under a being-destroyed config_group.
I discovered two bugs, as described below, and fixed in the attached
version of the patch. Sorry for the noise.
[...]
>
> Index: b/fs/configfs/dir.c
> ===================================================================
> --- a/fs/configfs/dir.c 2008-05-22 12:38:02.000000000 +0200
> +++ b/fs/configfs/dir.c 2008-05-22 12:49:08.000000000 +0200
[...]
> @@ -383,7 +395,15 @@ static int configfs_detach_prep(struct d
> if (sd->s_type & CONFIGFS_NOT_PINNED)
> continue;
> if (sd->s_type & CONFIGFS_USET_DEFAULT) {
> - mutex_lock(&sd->s_dentry->d_inode->i_mutex);
> + lock_level = set_dirent_lock_level(parent_sd, sd);
> + if (lock_level < 0) {
> + /* Bad bad bad! We cannot remove a directory
> + * that we let be created! */
> + ret = -ELOOP;
> + break;
> + }
> + mutex_lock_nested(&sd->s_dentry->d_inode->i_mutex,
> + I_MUTEX_CHILD + lock_level);
> /* Mark that we've taken i_mutex */
> sd->s_type |= CONFIGFS_USET_DROPPING;
>
Here setting lock_level before acquiring the mutex may race with mkdir
(and thus configfs_attach_group()) in the default group. A corrected
version of the patch is attached.
[...]
> @@ -1206,7 +1230,11 @@ static int configfs_rmdir(struct inode *
> return -EINVAL;
> }
>
> + /* The inode of the config_item being removed is already locked by
> + * vfs_rmdir() with subclass I_MUTEX_CHILD. Account for it. */
> + set_dirent_lock_level(parent_item->ci_dentry->d_fsdata, sd);
> ret = configfs_detach_prep(dentry);
> + reset_dirent_lock_level(sd);
> if (ret) {
> configfs_detach_rollback(dentry);
> config_item_put(parent_item);
lock_level should be reset on rollback, since mkdir may be called again
after a failure of rmdir. Again, fixed in the new version of the patch
in attachment.
Louis
--
Dr Louis Rilling Kerlabs
Skype: louis.rilling Batiment Germanium
Phone: (+33|0) 6 80 89 08 23 80 avenue des Buttes de Coesmes
http://www.kerlabs.com/ 35700 Rennes
-------------- next part --------------
A non-text attachment was scrubbed...
Name: configfs-make-default-group-destruction-lockdep-friendly-2.patch
Type: text/x-diff
Size: 7137 bytes
Desc: not available
Url : http://oss.oracle.com/pipermail/ocfs2-devel/attachments/20080523/53738fb6/attachment.bin
next prev parent reply other threads:[~2008-05-23 16:44 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-22 11:40 [Ocfs2-devel] [RFC][PATCH 0/4] configfs: Make nested default groups lockdep-friendly v2 Louis Rilling
2008-05-22 11:40 ` [Ocfs2-devel] [RFC][PATCH 1/4] Prepare i_mutex lockdep subclasses for locking of variable path lengths Louis Rilling
2008-05-22 11:40 ` [Ocfs2-devel] [RFC][PATCH 2/4] Prepare vfs_rmdir() for further nested i_mutex locking Louis Rilling
2008-05-22 11:40 ` [Ocfs2-devel] [RFC][PATCH 3/4] configfs: Make nested default groups creations lockdep-friendly Louis Rilling
2008-05-22 11:40 ` [Ocfs2-devel] [RFC][PATCH 4/4] configfs: Make multiple default_group destructions lockdep friendly Louis Rilling
2008-05-23 16:44 ` Louis Rilling [this message]
2008-06-02 23:07 ` Joel Becker
2008-06-03 16:00 ` Louis Rilling
2008-06-06 23:01 ` Joel Becker
2008-06-09 11:03 ` Louis Rilling
2008-06-09 12:54 ` [Ocfs2-devel] [BUG] deadlock between configfs_rmdir() and sys_rename() (WAS Re: [RFC][PATCH 4/4] configfs: Make multiple default_group) " Louis Rilling
2008-06-10 1:58 ` Joel Becker
2008-06-10 10:14 ` Louis Rilling
2008-06-10 17:36 ` Joel Becker
2008-06-11 14:10 ` Louis Rilling
2008-06-11 17:30 ` Louis Rilling
2008-06-11 21:15 ` Joel Becker
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=4836F48A.70008@kerlabs.com \
--to=louis.rilling@kerlabs.com \
--cc=Joel.Becker@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=ocfs2-devel@oss.oracle.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;
as well as URLs for NNTP newsgroup(s).