diff -u --recursive --new-file linux-2.5.20-seekdir/fs/nfs/dir.c linux-2.5.20-cto2/fs/nfs/dir.c --- linux-2.5.20-seekdir/fs/nfs/dir.c Wed Aug 21 18:50:37 2002 +++ linux-2.5.20-cto2/fs/nfs/dir.c Wed Aug 21 18:51:47 2002 @@ -456,16 +456,9 @@ } static inline -int nfs_lookup_verify_inode(struct inode *inode, int flags) +int nfs_lookup_verify_inode(struct inode *inode) { - struct nfs_server *server = NFS_SERVER(inode); - /* - * If we're interested in close-to-open cache consistency, - * then we revalidate the inode upon lookup. - */ - if (!(server->flags & NFS_MOUNT_NOCTO) && !(flags & LOOKUP_CONTINUE)) - NFS_CACHEINV(inode); - return nfs_revalidate_inode(server, inode); + return nfs_revalidate_inode(NFS_SERVER(inode), inode); } /* @@ -519,7 +512,7 @@ /* Force a full look up iff the parent directory has changed */ if (nfs_check_verifier(dir, dentry)) { - if (nfs_lookup_verify_inode(inode, flags)) + if (nfs_lookup_verify_inode(inode)) goto out_bad; goto out_valid; } diff -u --recursive --new-file linux-2.5.20-seekdir/fs/nfs/inode.c linux-2.5.20-cto2/fs/nfs/inode.c --- linux-2.5.20-seekdir/fs/nfs/inode.c Thu Aug 15 03:05:32 2002 +++ linux-2.5.20-cto2/fs/nfs/inode.c Wed Aug 21 18:51:47 2002 @@ -850,15 +850,23 @@ { struct rpc_auth *auth; struct rpc_cred *cred; + int err = 0; lock_kernel(); + /* Ensure that we revalidate the data cache */ + if (NFS_SERVER(inode)->flags & NFS_MOUNT_NOCTO) { + err = __nfs_revalidate_inode(NFS_SERVER(inode),inode); + if (err) + goto out; + } auth = NFS_CLIENT(inode)->cl_auth; cred = rpcauth_lookupcred(auth, 0); filp->private_data = cred; if (filp->f_mode & FMODE_WRITE) nfs_set_mmcred(inode, cred); +out: unlock_kernel(); - return 0; + return err; } int nfs_release(struct inode *inode, struct file *filp) @@ -1060,7 +1068,8 @@ inode->i_atime = new_atime; if (NFS_CACHE_MTIME(inode) != new_mtime) { - NFS_MTIME_UPDATE(inode) = jiffies; + if (invalid) + NFS_MTIME_UPDATE(inode) = jiffies; NFS_CACHE_MTIME(inode) = new_mtime; inode->i_mtime = nfs_time_to_secs(new_mtime); }