From: Al Viro <viro@ZenIV.linux.org.uk>
To: Sage Weil <sage@inktank.com>
Cc: linux-fsdevel@vger.kernel.org, ceph-devel@vger.kernel.org
Subject: Re: [ceph] locking fun with d_materialise_unique()
Date: Tue, 29 Jan 2013 08:00:37 +0000 [thread overview]
Message-ID: <20130129080036.GI4503@ZenIV.linux.org.uk> (raw)
In-Reply-To: <alpine.DEB.2.00.1301282115060.16431@cobra.newdream.net>
On Mon, Jan 28, 2013 at 09:20:34PM -0800, Sage Weil wrote:
> Yep, that is indeed a problem. I think we just need to do the r_aborted
> and/or r_locked_dir check in the else if condition...
>
> > I'm not sure if we are guaranteed that ceph_readdir_prepopulate() won't
> > get to its splice_dentry() and d_delete() calls in similar situations -
> > I hadn't checked that one yet. If it isn't guaranteed, we have a problem
> > there as well.
>
> ...and the condition guarding readdir_prepopulate(). :)
> I think you're reading it correctly. The main thing to keep in mind here
> is that we *do* need to call fill_inode() for the inode metadata on these
> requests to keep the mds and client state in sync. The dentry state is
> safe to ignore.
You mean the parts under
if (rinfo->head->is_dentry) {
and
if (rinfo->head->is_target) {
in there? Because there's fill_inode() called from readdir_prepopulate()
and it's a lot more problematic than those two...
> It would be great to have the dir i_mutex rules summarized somewhere, even
> if it is just a copy of the below. It took a fair bit of trial and error
> to infer what was going on when writing this code. :)
Directory ->i_mutex rules are in part documented - "what VFS guarantees
to hold" side is in Documentation/filesystems/directory-locking. It's
the other side ("what locks are expected to be held by callers of dcache.c
functions") that is badly missing...
> Ping me when you've pushed that branch and I'll take a look...
To gitolite@ra.kernel.org:/pub/scm/linux/kernel/git/viro/vfs.git
01a88fa..4056362 master -> master
with tentative ceph patch in the very end. Should be on git.kernel.org
shortly...
next prev parent reply other threads:[~2013-01-29 8:00 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-29 4:52 [ceph] locking fun with d_materialise_unique() Al Viro
2013-01-29 5:20 ` Sage Weil
2013-01-29 8:00 ` Al Viro [this message]
2013-01-29 21:03 ` Sage Weil
2013-01-29 21:03 ` Sage Weil
2013-01-30 14:42 ` Al Viro
2013-02-01 1:14 ` Al Viro
2013-02-05 21:59 ` Sage Weil
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=20130129080036.GI4503@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=ceph-devel@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=sage@inktank.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.