Thanks Ian for your reply.
Ian Kent wrote:
> On Tue, 2008-01-29 at 17:36 +0800, wengang wang wrote:
>
>> Hi experts,
>>
>> In RHEL kernel 2.6.18-53 and mainline kernel 2.6.24,
>>
>
> This was a known problem due to a couple of missing patches in the
> RHEL-5 kernel revision 53.
>
>
yes.
> I'm not aware of a problem with 2.6.24.
>
>
yes, there is no problem with 2.6.24.
By involving it, I just want to say the code
d_instantiate(); //not d_add()
is the same.
>> in function autofs4_lookup() in fs/autofs4/root.c,
>> if dentry is not found in function autofs4_lookup_unhashed(),
>> a d_instantiate() is done on the dentry passed as parameter instead of
>> d_add().
>>
>
> d_instantiate is used to delay hashing the dentry until the following
> mkdir as this prevents a potential deadlock.
>
>
>> seems this cause a problem that the first access just after autofs
>> started to
>> /path/to/<autofsMountPoint>/<nfsMountPoint> fail with the error ENOENT.
>>
>> If I rolled back to use d_add(), there is no such problem.
>> Is this a bug or I omitted something?
>>
>
> Considering there's virtually no information to go on here I have no
> idea but this hasn't been seen to be a problem other than in the RHEL
> kernel above.
>
> You will need to provide a lot more information than this if you want me
> to investigate.
>
>
detail for this problem is:
1) adding a line in /etc/auto.master
/topdir /etc/auto.topdir
2) in auto.topdir
subdir -fstype=nfs hostname:/path/to/exported/directory
3) /etc/init.d/autofs restart
4) ll /topdir/subdir
got NO SUCH DIRECTORY here.
by strace, lstat returned ENOENT.
according to your
This was a known problem due to a couple of missing patches in the
RHEL-5 kernel revision 53.
I made a patch by comparing RHEL-5 53 kernel with 2.6.24. and seems it
solves the problem.
the patch is as below:
----------------------------------------------------------------------------------------------------
--- ./fs/autofs4/root.c.orig 2008-01-29 22:20:18.000000000 -0500
+++ ./fs/autofs4/root.c 2008-01-29 22:20:47.000000000 -0500
@@ -662,10 +662,18 @@
* doesn't do the right thing for all system calls, but it should
* be OK for the operations we permit from an autofs.
*/
- if (dentry->d_inode && d_unhashed(dentry)) {
+ if (!oz_mode && d_unhashed(dentry)) {
+ struct dentry *parent = dentry->d_parent;
+ struct dentry *new = d_lookup(parent, &dentry->d_name);
+ if (new != NULL)
+ dentry = new;
+ else
+ dentry = ERR_PTR(-ENOENT);
+
if (unhashed)
dput(unhashed);
- return ERR_PTR(-ENOENT);
+
+ return dentry;
}
if (unhashed)
----------------------------------------------------------------------------------------------------
is this patch ok and enough for RHEL-5 kernel revision 53?
> Ian
thanks,
wengang.
_______________________________________________
autofs mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/autofs