From: NeilBrown there's a small typo in nfsd_acceptable. It calls err = permission(parent->d_inode, S_IXOTH, NULL); It really wants to use MAY_EXEC instead of S_IXOTH. Those happen to be the same at the moment, but may not do so forever. From: Olaf Kirch : From: "J. Bruce Fields" Signed-off-by: Neil Brown --- 25-akpm/fs/nfsd/nfsfh.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN fs/nfsd/nfsfh.c~knfsd-3-of-11-nfsd_acceptable_typopatch fs/nfsd/nfsfh.c --- 25/fs/nfsd/nfsfh.c~knfsd-3-of-11-nfsd_acceptable_typopatch 2004-05-28 00:10:34.993427600 -0700 +++ 25-akpm/fs/nfsd/nfsfh.c 2004-05-28 00:10:34.996427144 -0700 @@ -56,7 +56,7 @@ int nfsd_acceptable(void *expv, struct d /* make sure parents give x permission to user */ int err; parent = dget_parent(tdentry); - err = permission(parent->d_inode, S_IXOTH, NULL); + err = permission(parent->d_inode, MAY_EXEC, NULL); if (err < 0) { dput(parent); break; _