Index: xfs_message.c
===================================================================
RCS file: /afs/stacken.kth.se/src/SourceRepository/arla/xfs/linux/xfs_message.c,v
retrieving revision 1.90
diff -u -w -r1.90 xfs_message.c
--- xfs_message.c	2000/10/14 20:17:44	1.90
+++ xfs_message.c	2000/10/17 23:43:51
@@ -398,7 +402,19 @@
 void
 xfs_invalid_xnode(struct xfs_node *xnode)
 {
+    struct inode *inode = XNODE_TO_VNODE(xnode);
+
+    if (xfs_iread(inode) > 0)
+	xnode->flags |= XFS_STALE;
+    else
+	xfs_force_invalid_xnode(xnode);
+}
+
+void
+xfs_force_invalid_xnode(struct xfs_node *xnode)
+{
     XFSDEB(XDEBNODE, ("xfs_invalid_xnode: %p\n", xnode));
+
     /* 
      * XXX Really need to put back dirty data first.
      * XXXRACE set DATA_FROM_XNODE(xnode) before dput() ?
Index: xfs_node.c
===================================================================
RCS file: /afs/stacken.kth.se/src/SourceRepository/arla/xfs/linux/xfs_node.c,v
retrieving revision 1.48
diff -u -w -r1.48 xfs_node.c
--- xfs_node.c	2000/10/02 23:47:49	1.48
+++ xfs_node.c	2000/10/17 23:43:59
@@ -264,7 +264,7 @@
     
     /* There might still be a few nodes out there, invalidate them */
     for (xnode = xfsp->nodes; xnode; xnode = xnode->next) {
-	xfs_invalid_xnode(xnode);
+	xfs_force_invalid_xnode(xnode);
     }
     
     XFSDEB(XDEBNODE, ("free_all_xfs_nodes done\n"));
Index: xfs_vfsops.c
===================================================================
RCS file: /afs/stacken.kth.se/src/SourceRepository/arla/xfs/linux/xfs_vfsops.c,v
retrieving revision 1.69
diff -u -w -u -w -r1.69 xfs_vfsops.c
--- xfs_vfsops.c	2000/10/02 23:48:00	1.69
+++ xfs_vfsops.c	2000/11/01 00:20:03
@@ -286,8 +286,16 @@
     XFSDEB(XDEBVFOPS,("xfs_put_inode: inode: %p count: %d aliases:",
 		      inode, xfs_iread(inode)));
     print_aliases(inode);
-    if (xfs_iread(inode) == 1)
+    if (xfs_iread(inode) == 1) {
+	struct xfs_node *xn = VNODE_TO_XNODE(inode);
+
 	inode->i_nlink = 0;
+	if (xn != NULL) {
+	    if (xn->flags & XFS_STALE)
+		xfs_force_invalid_xnode (xn);
+	    xn->flags &= ~XFS_STALE;
+	}
+    }
 }
 
 /*
Index: xfs/xfs_fs.h
===================================================================
RCS file: /afs/stacken.kth.se/src/SourceRepository/arla/xfs/linux/xfs/xfs_fs.h,v
retrieving revision 1.19
diff -u -w -r1.19 xfs_fs.h
--- xfs/xfs_fs.h	2000/10/02 23:48:32	1.19
+++ xfs/xfs_fs.h	2000/10/17 23:43:43
@@ -74,6 +74,7 @@
 int xfs_has_pag(const struct xfs_node *xn, xfs_pag_t);
 
 void xfs_invalid_xnode(struct xfs_node *xnode);
+void xfs_force_invalid_xnode(struct xfs_node *xnode);
 void xfs_attr2inode(const struct xfs_attr *attr, struct inode *inode);
 void vattr2xfs_attr(const struct iattr *iattr, struct xfs_attr *attr);
 #endif /* _xfs_h */
