Hi, The following patch fixes the one remaining hole in the NFS close-to-open checking. It is due to the VFS assuming that it doesn't have to revalidate the dentry when one does open("."), or open(".."). This means that the NFS layer is never notified that it needs to check the data cache integrity for this case. Al has said he plans to plug this hole in 2.5.x as part of his unionfs changes, however we also need a fix in 2.4.x. Other networked filesystems (Alan has mentioned OpenGFS) are also having the same problem... Unless Al has a different suggestion (Al?), the following patch inserts the necessary lines into link_path_walk(). Cheers, Trond diff -u --recursive --new-file linux-2.4.19-fix_put/fs/namei.c linux-2.4.19-cto/fs/namei.c --- linux-2.4.19-fix_put/fs/namei.c Tue Mar 12 14:58:54 2002 +++ linux-2.4.19-cto/fs/namei.c Tue Mar 12 15:35:02 2002 @@ -457,7 +457,7 @@ while (*name=='/') name++; if (!*name) - goto return_base; + goto return_reval; inode = nd->dentry->d_inode; if (current->link_count) @@ -576,7 +576,7 @@ inode = nd->dentry->d_inode; /* fallthrough */ case 1: - goto return_base; + goto return_reval; } if (nd->dentry->d_op && nd->dentry->d_op->d_hash) { err = nd->dentry->d_op->d_hash(nd->dentry, &this); @@ -627,6 +627,19 @@ nd->last_type = LAST_DOT; else if (this.len == 2 && this.name[1] == '.') nd->last_type = LAST_DOTDOT; +return_reval: + /* + * We bypassed the ordinary revalidation routines. + * Check the cached dentry for staleness. + */ + dentry = nd->dentry; + if (dentry && dentry->d_op && dentry->d_op->d_revalidate) { + err = -ESTALE; + if (!dentry->d_op->d_revalidate(dentry, 0)) { + d_invalidate(dentry); + break; + } + } return_base: return 0; out_dput: - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/