From: Ian Kent <raven@themaw.net>
To: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Jeff Moyer <jmoyer@redhat.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Miklos Szeredi <miklos@szeredi.hu>,
jesper@krogh.cc, linux-kernel@vger.kernel.org,
linux-fsdevel@vger.kernel.org
Subject: Re: Linux 2.6.26-rc4
Date: Tue, 10 Jun 2008 12:57:41 +0800 [thread overview]
Message-ID: <1213073861.3024.34.camel@raven.themaw.net> (raw)
In-Reply-To: <1212547323.3146.45.camel@raven.themaw.net>
On Wed, 2008-06-04 at 10:42 +0800, Ian Kent wrote:
> On Wed, 2008-06-04 at 00:00 +0100, Al Viro wrote:
> > On Tue, Jun 03, 2008 at 03:53:36PM -0400, Jeff Moyer wrote:
> >
> > > autofs4_lookup is called on behalf a process trying to walk into an
> > > automounted directory. That dentry's d_flags is set to
> > > DCACHE_AUTOFS_PENDING but not hashed. A waitqueue entry is created,
> > > indexed off of the name of the dentry. A callout is made to the
> > > automount daemon (via autofs4_wait).
> > >
> > > The daemon looks up the directory name in its configuration. If it
> > > finds a valid map entry, it will then create the directory using
> > > sys_mkdir. The autofs4_lookup call on behalf of the daemon (oz_mode ==
> > > 1) will return NULL, and then the mkdir call will be made. The
> > > autofs4_mkdir function then instantiates the dentry which, by the way,
> > > is different from the original dentry passed to autofs4_lookup. (This
> > > dentry also does not get the PENDING flag set, which is a bug addressed
> > > by a patch set that Ian and I have been working on; specifically, the
> > > idea is to reuse the dentry from the original lookup, but I digress).
> > >
> > > The daemon then mounts the share on the given directory and issues an
> > > ioctl to wakeup the waiter. When awakened, the waiter clears the
> > > DCACHE_AUTOFS_PENDING flag, does another lookup of the name in the
> > > dcache and returns that dentry if found.
> > > Later, the dentry gets expired via another ioctl. That path sets
> > > the AUTOFS_INF_EXPIRING flag in the d_fsdata associated with the dentry.
> > > It then calls out to the daemon to perform the unmount and rmdir. The
> > > rmdir unhashes the dentry (and places it on the rehash list).
> > >
> > > The dentry is removed from the rehash list if there was a racing expire
> > > and mount or if the dentry is released.
> > >
> > > This description is valid for the tree as it stands today. Ian and I
> > > have been working on fixing some other race conditions which will change
> > > the dentry life cycle (for the better, I hope).
> >
> > So what happens if new lookup hits between umount and rmdir?
>
> It will wait for the expire to complete and then wait for a mount
> request to the daemon.
Actually, that explanation is a bit simple minded.
It should wait for the expire in ->revalidate().
Following the expire completion d_invalidate() should return 0, since
the dentry is now unhashed, which causes ->revalidate() to return 0.
do_lookup() should see this and call a ->lookup().
But maybe I've missed something as I'm seeing a problem now.
Ian
next prev parent reply other threads:[~2008-06-10 5:01 UTC|newest]
Thread overview: 89+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-26 18:41 Linus Torvalds
2008-05-26 21:24 ` Jesper Krogh
2008-05-26 21:42 ` Linus Torvalds
2008-05-27 0:25 ` Arjan van de Ven
2008-05-27 0:31 ` Arjan van de Ven
2008-05-27 5:43 ` David Woodhouse
2008-05-27 6:00 ` Arjan van de Ven
2008-05-27 6:24 ` David Woodhouse
2008-05-27 1:16 ` Carl-Daniel Hailfinger
2008-05-27 1:23 ` Carl-Daniel Hailfinger
2008-05-27 1:52 ` Abhijit Menon-Sen
2008-05-27 5:19 ` Jesper Krogh
2008-05-27 5:31 ` [MTD] [MAPS] ck804rom: fix driver_data in probe table David Woodhouse
2008-05-27 5:31 ` Linux 2.6.26-rc4 David Woodhouse
2008-05-27 10:35 ` Jeff Garzik
2008-05-27 10:53 ` Carl-Daniel Hailfinger
2008-05-27 10:54 ` Jeff Garzik
2008-05-27 10:58 ` Carl-Daniel Hailfinger
2008-05-27 5:23 ` 2.6.26-rc4: RIP find_pid_ns+0x6b/0xa0 Alexey Dobriyan
2008-05-27 9:06 ` Oleg Nesterov
2008-05-27 15:03 ` Linus Torvalds
2008-05-27 15:40 ` Paul E. McKenney
2008-05-27 16:11 ` Linus Torvalds
2008-05-27 17:06 ` Paul E. McKenney
2008-05-28 5:01 ` Paul E. McKenney
2008-05-28 7:26 ` Paul E. McKenney
2008-05-27 16:45 ` Oleg Nesterov
2008-05-27 17:37 ` Oleg Nesterov
2008-05-27 21:26 ` Alexey Dobriyan
2008-05-27 10:01 ` Linux 2.6.26-rc4 J.A. Magallón
2008-05-28 23:59 ` Bill Davidsen
[not found] ` <20080527124315.131b1343@Varda>
2008-05-28 20:10 ` Linus Torvalds
2008-05-28 20:17 ` Johannes Berg
2008-05-28 21:48 ` John W. Linville
2008-06-03 9:49 ` Jesper Krogh
2008-06-03 9:57 ` Al Viro
2008-06-03 10:04 ` Jesper Krogh
2008-06-03 10:13 ` Miklos Szeredi
2008-06-03 10:37 ` Miklos Szeredi
2008-06-03 10:48 ` Al Viro
2008-06-03 13:31 ` Ian Kent
2008-06-03 13:32 ` Ian Kent
2008-06-03 10:40 ` Al Viro
2008-06-03 10:45 ` Miklos Szeredi
2008-06-03 10:52 ` Al Viro
2008-06-03 13:27 ` Ian Kent
2008-06-03 15:01 ` Linus Torvalds
2008-06-03 16:07 ` Ian Kent
2008-06-03 16:35 ` Linus Torvalds
2008-06-03 16:41 ` Al Viro
2008-06-03 16:50 ` Al Viro
2008-06-03 17:28 ` Ian Kent
2008-06-03 17:41 ` Al Viro
2008-06-03 17:41 ` Ian Kent
2008-06-03 17:50 ` Al Viro
2008-06-03 17:49 ` Ian Kent
2008-06-03 16:59 ` Linus Torvalds
2008-06-03 17:30 ` Ian Kent
2008-06-03 17:13 ` Ian Kent
2008-06-03 17:30 ` Al Viro
2008-06-03 17:38 ` Ian Kent
2008-06-03 17:46 ` Jeff Moyer
2008-06-03 19:18 ` Al Viro
2008-06-03 19:53 ` Jeff Moyer
2008-06-03 23:00 ` Al Viro
2008-06-04 2:42 ` Ian Kent
2008-06-04 5:34 ` Miklos Szeredi
2008-06-04 5:41 ` Ian Kent
2008-06-10 4:57 ` Ian Kent [this message]
2008-06-10 6:28 ` Jesper Krogh
2008-06-10 6:40 ` Ian Kent
2008-06-10 9:09 ` Ian Kent
2008-06-12 3:03 ` Ian Kent
2008-06-12 7:02 ` Jesper Krogh
2008-06-12 11:21 ` Ian Kent
2008-06-12 11:19 ` Ian Kent
2008-06-04 1:36 ` Ian Kent
2008-06-05 7:31 ` Ian Kent
2008-06-05 21:29 ` Linus Torvalds
2008-06-05 21:34 ` Jesper Krogh
2008-06-06 2:39 ` Ian Kent
2008-06-05 22:30 ` Andrew Morton
2008-06-06 2:47 ` Ian Kent
2008-06-27 4:18 ` Ian Kent
2008-06-06 6:23 ` Jesper Krogh
2008-06-06 8:21 ` Ian Kent
2008-06-06 8:25 ` Ian Kent
2008-06-03 10:35 ` Al Viro
2008-06-04 17:51 ` Jesper Krogh
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=1213073861.3024.34.camel@raven.themaw.net \
--to=raven@themaw.net \
--cc=jesper@krogh.cc \
--cc=jmoyer@redhat.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=miklos@szeredi.hu \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®