linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ian Kent <raven@themaw.net>
To: Sage Weil <sage@newdream.net>
Cc: linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	Christoph Hellwig <hch@infradead.org>,
	akpm@linux-foundation.org, Al Viro <viro@zeniv.linux.org.uk>,
	Yehuda Sadeh <yehuda@newdream.net>,
	"H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [PATCH 1/2] vfs: make real_lookup do dentry revalidation with i_mutex held
Date: Wed, 24 Jun 2009 17:17:31 +0800	[thread overview]
Message-ID: <4A41EF2B.606@themaw.net> (raw)
In-Reply-To: <Pine.LNX.4.64.0906232241400.4084@cobra.newdream.net>

Sage Weil wrote:
> On Wed, 24 Jun 2009, Ian Kent wrote:
>> Ian Kent wrote:
>>> Sage Weil wrote:
>>>> Hi Ian,
>>>>
>>>> Have you had a chance to look at getting autofs4 lookup/revalidate 
>>>> adjusted so that this real_lookup() fix[1] can go in?
>>>>
>>>> Please let me know if there is anything I can do to help here.  If you're 
>>>> still occupied, I'm happy to spin something up and send it your way... 
>>>> just let me know.
>>> Sorry, I haven't had time to do more on this.
>>> There is also the issue of what to do about removing the autofs module
>>> and renaming autofs4 to autofs, as this will break the autofs module.
>>>
>>> I did start contacting people I think would want to know about this but
>>> haven't gone further than an initial mail.
>>>
>>> The other thing is that this patch was originally written quite a while
>>> ago and, although it appears to work ok, I'm not sure it's quite what we
>>> need.
>> I'm continuing with this now, but there's a deadlock in there somewhere!
> 
> Sorry, are you still working with the patch you posted a few months back?

It had changed a little but is quite different now.
I have a somewhat better stress test now so things that don't work will
pop out.

> 
> 	http://marc.info/?l=linux-fsdevel&m=123831685111213&w=2
> 
> Looking over it, the 
> 
> +		unsigned int lock_held = mutex_is_locked(&dir->i_mutex);
> ...
> +		if (lock_held) {
> +			/* Already pending, send to ->lookup() */
> +			d_drop(dentry);
> 
> bit looks highly suspect.  I'm guessing revalidate should never sleep, and 
> always kick things off to ->lookup() (to do any waiting on upcall 
> completion or whatever else) if the dentry isn't valid now...?

Yeah, I've heard that before, ;)

And that maybe the case, but that was what I first had.

Sending everything to ->lookup() might be possible but it certainly
isn't that simple.

Waiting in ->d_revaidate() isn't that different to waiting in ->lookup()
anyway as that must always be done without the directory mutex held. If
the lock isn't held when in ->d_revalidate() I can't really see any
reason not to handle that right their, possibly preventing the need to
go to ->lookup().

There are several cases I need to deal with, apart from path walks
initiated by the daemon which don't cause any call backs, and so are
largely handled by trivially returning success. The cases are, an
expiring dentry that will go away which ->lookup() can't yet handle, an
expiring dentry that won't go away which ->lookup() should be able to
handle already, and a straight out mount request which ->lookup() should
also be able to handle. The tail end of the expire cases can progress
concurrently with a mount, which is further complicated by the two cases
of going away or not, so it's all a bit tricky.

In any case I need to get this to work without the change you proposed,
except for cases that result from the locking change, and I'm using
printks to track incorrect returns to identify those cases. So what I
need right now is consistent behaviour and I'm not quite there. Once I
have that I'll work on any issues resulting from the locking change.

A lot has changed in the autofs4 module since I first tried to do this
and I now have a fairly aggressive test, so what appeared to work before
actually doesn't and it isn't as straight forward as I hoped.

Ian

  reply	other threads:[~2009-06-24  9:17 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-19 20:16 [PATCH 1/2] vfs: make real_lookup do dentry revalidation with i_mutex held Sage Weil
2009-03-19 20:16 ` [PATCH 2/2] vfs: clean up real_lookup Sage Weil
2009-03-19 20:22   ` Christoph Hellwig
2009-03-19 20:35     ` Sage Weil
2009-03-19 20:23 ` [PATCH 1/2] vfs: make real_lookup do dentry revalidation with i_mutex held Christoph Hellwig
2009-03-24  4:14 ` Ian Kent
2009-03-24  4:18   ` Ian Kent
2009-03-25  4:29     ` Sage Weil
2009-03-25  6:08       ` Ian Kent
2009-03-25 16:11         ` Ian Kent
2009-03-25 19:11           ` Sage Weil
2009-03-26  2:09             ` Ian Kent
2009-03-26  3:53               ` Sage Weil
2009-03-26  8:00                 ` Ian Kent
2009-03-26 10:38                 ` Ian Kent
2009-03-29  8:53                   ` Ian Kent
2009-04-03  0:58                     ` Sage Weil
2009-04-03  2:00                       ` Ian Kent
2009-04-03  3:07                         ` Sage Weil
2009-06-22 17:15                         ` Sage Weil
2009-06-23  0:37                           ` Ian Kent
2009-06-23  2:40                             ` H. Peter Anvin
2009-06-25  7:21                               ` Ian Kent
2009-06-25 13:41                                 ` H. Peter Anvin
2009-06-25 13:58                                   ` Christoph Hellwig
2009-06-23  2:42                             ` H. Peter Anvin
2009-06-24  2:28                             ` Ian Kent
2009-06-24  5:45                               ` Sage Weil
2009-06-24  9:17                                 ` Ian Kent [this message]
2009-06-24 17:46                                   ` Sage Weil
2009-06-25  2:50                                     ` Ian Kent
2009-06-25  4:13                                     ` Ian Kent
2009-06-25  4:49                                       ` Sage Weil
2009-06-25  5:52                                         ` Ian Kent
2009-09-17  6:36                                           ` Ian Kent
2009-07-20  2:45                                 ` Ian Kent
2009-07-28 22:47                                   ` Sage Weil
2009-07-29  2:59                                     ` Ian Kent
2009-07-29 16:57                                       ` Sage Weil
2009-07-30  0:56                                         ` Ian Kent
2009-07-30 17:47                                           ` Sage Weil
2009-07-31  2:03                                             ` Ian Kent
2009-03-26  3:54               ` Ian Kent
2009-03-26  4:03                 ` Sage Weil
2009-03-26  5:07                 ` Ian Kent

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=4A41EF2B.606@themaw.net \
    --to=raven@themaw.net \
    --cc=akpm@linux-foundation.org \
    --cc=hch@infradead.org \
    --cc=hpa@zytor.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=sage@newdream.net \
    --cc=viro@zeniv.linux.org.uk \
    --cc=yehuda@newdream.net \
    /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).