From: "J. Bruce Fields" <bfields@fieldses.org>
To: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: Re: [git pull] vfs and fs fixes
Date: Tue, 17 Apr 2012 17:14:19 -0400 [thread overview]
Message-ID: <20120417211419.GC27426@fieldses.org> (raw)
In-Reply-To: <20120417182825.GX6589@ZenIV.linux.org.uk>
On Tue, Apr 17, 2012 at 07:28:26PM +0100, Al Viro wrote:
> On Tue, Apr 17, 2012 at 07:01:29PM +0100, Al Viro wrote:
>
> > It isn't. Hell knows - I wonder if taking s_vfs_rename_mutex in all cases
> > in lock_rename() would be the right thing to do; it would remove the
> > problem, but might cost us too much contention...
>
> Actually, it's even worse. ext4_move_extents() locks a _pair_ of
> ->i_mutex (having checked that both are non-directories first). In
> i_ino order. So the only plausible ordering would be
> * directories by tree order (with s_vfs_rename_mutex held to
> stabilize the tree topology)
> * non-directories after all directories, ordered in some consistent
> way. Which would have to be by inumber if we want to leave ext4 code
> as-is.
>
> Bruce: for now I'm dropping that patch. We _might_ take ext4
> mutex_inode_double_lock() into fs/namei.c and have it used by
> vfs_rename_other(), but I'm not convinced that this is the right
> thing to do. Is there any other sane way to deal with nfsd problem?
> i_mutex is already used for more things than I'd like...
I don't want to give out a delegation while a rename, link, unlink, or
setattr of an inode is in progress. All but rename are covered by the
i_mutex.
I'm happy just failing the delegation in case of conflict.
Maybe instead I could continue using the i_mutex but handle rename some
other way; e.g. in delegation code:
if (!mutex_trylock(inode->i_mutex))
return -EAGAIN;
if (atomic_read(inode->i_renames_in_progress))
return -EAGAIN;
and add an
atomic_inc(inode->i_renames_in_progress);
atomic_dec(inode->i_renames_in_progress);
pair around rename.
Or I could increment that counter for all the conflicting operations and
rely on it instead of the i_mutex. I was trying to avoid adding
something like that (an inc, a dec, another error path) to every
operation. And hoping to avoid adding another field to struct inode.
Oh well.
--b.
next prev parent reply other threads:[~2012-04-17 21:14 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-17 5:25 [git pull] vfs and fs fixes Al Viro
2012-04-17 15:01 ` Linus Torvalds
2012-04-17 16:22 ` J. Bruce Fields
2012-04-17 16:33 ` Linus Torvalds
2012-04-17 16:33 ` Linus Torvalds
2012-04-17 17:06 ` J. Bruce Fields
2012-04-17 17:06 ` J. Bruce Fields
2012-04-17 17:59 ` Al Viro
2012-04-17 18:01 ` Al Viro
2012-04-17 18:28 ` Al Viro
2012-04-17 21:14 ` J. Bruce Fields [this message]
2012-04-17 22:08 ` Linus Torvalds
2012-04-17 23:44 ` Al Viro
2012-04-18 0:49 ` J. Bruce Fields
2012-04-18 0:56 ` Linus Torvalds
2012-04-18 21:52 ` J. Bruce Fields
2012-04-25 15:20 ` J. Bruce Fields
2012-04-25 15:22 ` [PATCH 1/5] vfs: fix outdated i_mutex_lock_class documentation bfields
2012-04-25 15:22 ` [PATCH 2/5] vfs: pull ext4's double-i_mutex-locking into common code bfields
2012-04-25 15:22 ` [PATCH 3/5] vfs: don't use PARENT/CHILD lock classes for non-directories bfields
2012-04-25 15:22 ` [PATCH 4/5] vfs: take i_mutex on renamed file bfields
2012-04-25 15:22 ` [PATCH 5/5] vfs: change nondirectory i_mutex ordering to fix quota deadlock bfields
2012-04-25 15:28 ` J. Bruce Fields
2012-04-25 19:53 ` Jan Kara
2012-04-25 19:58 ` J. Bruce Fields
2012-04-20 11:15 ` [git pull] vfs and fs fixes Jan Kara
2012-04-24 19:52 ` J. Bruce Fields
2012-04-24 22:23 ` Jan Kara
2012-04-25 11:29 ` J. Bruce Fields
2012-04-25 16:26 ` Jan Kara
2012-04-25 16:47 ` Steven Whitehouse
2012-04-25 17:11 ` J. Bruce Fields
2012-04-18 0:47 ` J. Bruce Fields
2012-04-19 3:23 ` Benjamin Herrenschmidt
2012-04-19 14:50 ` Ted Ts'o
2012-04-24 17:40 ` Greg KH
2012-04-24 17:45 ` Al Viro
2012-04-24 17:59 ` Greg KH
2012-04-24 18:04 ` Al Viro
2012-04-24 20:37 ` Greg KH
-- strict thread matches above, loose matches on Subject: below --
2013-09-18 22:52 Al Viro
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=20120417211419.GC27426@fieldses.org \
--to=bfields@fieldses.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=viro@ZenIV.linux.org.uk \
/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.