From: Al Viro <viro@ZenIV.linux.org.uk>
To: Jeff Moyer <jmoyer@redhat.com>
Cc: Ian Kent <raven@themaw.net>,
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: Wed, 4 Jun 2008 00:00:26 +0100 [thread overview]
Message-ID: <20080603230026.GH28946@ZenIV.linux.org.uk> (raw)
In-Reply-To: <x49abi2jnwf.fsf@segfault.boston.devel.redhat.com>
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?
Another thing: would be nice to write down the expected state of dentry
(positive/negative, flags, has/hasn't ->d_fsdata, flags on ->d_fsdata)
for all stages. I'll go through the code and do that once I get some sleep,
but if you'll have time to do it before that...
FWIW, I wonder if it would be better to leave the directory alone and just
have the daemon mount the sucker elsewhere and let the kernel side move
the damn thing in place itself, along with making dentry positive and
waking the sleepers up. Then we might get away with not unlocking anything
at all... That obviously doesn't help the current systems with existing
daemon, but it might be interesting for the next autofs version...
Note that we don't even have to mount it anywhere - mount2() is close to
the top of the pile for the next couple of cycles and it'd separate
"activate fs" from "attach fully set up fs to given place", with the
former resulting in a descriptor and the latter being
mount2(Attach, dir_fd, fs_fd);
Kernel side of autofs might receive the file descriptor in question and
do the rest itself...
next prev parent reply other threads:[~2008-06-03 23:00 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <alpine.LFD.1.10.0805261127030.2958@woody.linux-foundation.org>
2008-06-03 9:49 ` Linux 2.6.26-rc4 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 [this message]
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
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
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=20080603230026.GH28946@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--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=raven@themaw.net \
--cc=torvalds@linux-foundation.org \
/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).