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 */