aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Kent <raven@themaw.net>2005-06-21 20:16:41 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-21 22:07:35 -0400
commit1684b2bba6972749bc9acee57585acd6c78050b2 (patch)
tree2af8d8837b25f82e09cfe478a103779a3e98bfc4
parentcc9acc885819696c0ed00f4f0f0cda0c7583f116 (diff)
[PATCH] autofs4: bad lookup fix
For browsable autofs maps, a mount request that arrives at the same time an expire is happening can fail to perform the needed mount. This happens becuase the directory exists and so the revalidate succeeds when we need it to fail so that lookup is called on the same dentry to do the mount. Instead lookup is called on the next path component which should be whithin the mount, but the parent isn't mounted. The solution is to allow the revalidate to continue and perform the mount as no directory creation (at mount time) is needed for browsable mount entries. Signed-off-by: Ian Kent <raven@themaw.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--fs/autofs4/root.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/autofs4/root.c b/fs/autofs4/root.c
index e137acf0543d..2a771ec66956 100644
--- a/fs/autofs4/root.c
+++ b/fs/autofs4/root.c
@@ -306,7 +306,14 @@ static int try_to_fill_dentry(struct dentry *dentry,
306 306
307 DPRINTK("expire done status=%d", status); 307 DPRINTK("expire done status=%d", status);
308 308
309 return 0; 309 /*
310 * If the directory still exists the mount request must
311 * continue otherwise it can't be followed at the right
312 * time during the walk.
313 */
314 status = d_invalidate(dentry);
315 if (status != -EBUSY)
316 return 0;
310 } 317 }
311 318
312 DPRINTK("dentry=%p %.*s ino=%p", 319 DPRINTK("dentry=%p %.*s ino=%p",