--- linux-2.4.29/fs/nfs/write.c.orig 2004-04-14 09:05:40.000000000 -0400 +++ linux-2.4.29/fs/nfs/write.c 2005-01-31 10:51:45.979056000 -0500 @@ -1073,6 +1073,9 @@ nfs_writeback_done(struct rpc_task *task SetPageError(page); if (req->wb_file) req->wb_file->f_error = task->tk_status; + if (task->tk_status == -ESTALE) + NFS_FLAGS(inode) |= NFS_INO_STALE; + nfs_inode_remove_request(req); dprintk(", error = %d\n", task->tk_status); goto next; @@ -1223,6 +1226,9 @@ nfs_commit_done(struct rpc_task *task) if (task->tk_status < 0) { if (req->wb_file) req->wb_file->f_error = task->tk_status; + if (task->tk_status == -ESTALE) + NFS_FLAGS(inode) |= NFS_INO_STALE; + nfs_inode_remove_request(req); dprintk(", error = %d\n", task->tk_status); goto next; --- linux-2.4.29/fs/nfs/inode.c.orig 2004-04-14 09:05:40.000000000 -0400 +++ linux-2.4.29/fs/nfs/inode.c 2005-01-31 11:02:13.492190000 -0500 @@ -907,11 +907,9 @@ __nfs_revalidate_inode(struct nfs_server if (status) { dfprintk(PAGECACHE, "nfs_revalidate_inode: (%x/%Ld) getattr failed, error=%d\n", inode->i_dev, (long long)NFS_FILEID(inode), status); - if (status == -ESTALE) { + if (status == -ESTALE) NFS_FLAGS(inode) |= NFS_INO_STALE; - if (inode != inode->i_sb->s_root->d_inode) - remove_inode_hash(inode); - } + goto out; }