On Sat, Jul 15, 2023 at 09:21:40AM +0200, Thordur Bjornsson wrote: > VOP_RECLAIM is only ever called from vclean() to cleanup fs dependent > data, and vclean() calls cache_purge(). > > Makes all of the reclaim implementations the same in this regard.
for now, I am still unsure about the change. yes, vclean() will call cache_purge() after calling VOP_RECLAIM(). so we ended-up to have called cache_purge() several times. but the vnode isn't in the same state inside VOP_RECLAIM() and after calling it. it seems fine as the *_reclaim() is freeing v_data contents, and cache_purge() doesn't touch that. also, you didn't change ufs_reclaim() to not call cache_purge() ? is it on purpose ? thanks. -- Sebastien Marie > diff --git sys/isofs/cd9660/cd9660_node.c sys/isofs/cd9660/cd9660_node.c > index bce99d77c22..300277f3b37 100644 > --- sys/isofs/cd9660/cd9660_node.c > +++ sys/isofs/cd9660/cd9660_node.c > @@ -218,7 +218,6 @@ cd9660_reclaim(void *v) > /* > * Purge old data structures associated with the inode. > */ > - cache_purge(vp); > if (ip->i_devvp) { > vrele(ip->i_devvp); > ip->i_devvp = 0; > diff --git sys/msdosfs/msdosfs_denode.c sys/msdosfs/msdosfs_denode.c > index 7a33212b648..3707c97458e 100644 > --- sys/msdosfs/msdosfs_denode.c > +++ sys/msdosfs/msdosfs_denode.c > @@ -600,7 +600,6 @@ msdosfs_reclaim(void *v) > /* > * Purge old data structures associated with the denode. > */ > - cache_purge(vp); > if (dep->de_devvp) { > vrele(dep->de_devvp); > dep->de_devvp = 0; > diff --git sys/nfs/nfs_node.c sys/nfs/nfs_node.c > index c8ac3b9bb14..38ad5db82fc 100644 > --- sys/nfs/nfs_node.c > +++ sys/nfs/nfs_node.c > @@ -237,7 +237,6 @@ nfs_reclaim(void *v) > if (np->n_wcred) > crfree(np->n_wcred); > > - cache_purge(vp); > pool_put(&nfs_node_pool, vp->v_data); > vp->v_data = NULL; > > diff --git sys/ntfs/ntfs_vnops.c sys/ntfs/ntfs_vnops.c > index d239112e991..d40e3d254f6 100644 > --- sys/ntfs/ntfs_vnops.c > +++ sys/ntfs/ntfs_vnops.c > @@ -221,8 +221,6 @@ ntfs_reclaim(void *v) > return (error); > > /* Purge old data structures associated with the inode. */ > - cache_purge(vp); > - > ntfs_frele(fp); > ntfs_ntput(ip); > > diff --git sys/tmpfs/tmpfs_vnops.c sys/tmpfs/tmpfs_vnops.c > index bc1390d72c9..6ec13e686b2 100644 > --- sys/tmpfs/tmpfs_vnops.c > +++ sys/tmpfs/tmpfs_vnops.c > @@ -1079,8 +1079,6 @@ tmpfs_reclaim(void *v) > racing = TMPFS_NODE_RECLAIMING(node); > rw_exit_write(&node->tn_nlock); > > - cache_purge(vp); > - > /* > * If inode is not referenced, i.e. no links, then destroy it. > * Note: if racing - inode is about to get a new vnode, leave it. > diff --git sys/ufs/ext2fs/ext2fs_vnops.c sys/ufs/ext2fs/ext2fs_vnops.c > index 235590d7c74..006a06b0dc8 100644 > --- sys/ufs/ext2fs/ext2fs_vnops.c > +++ sys/ufs/ext2fs/ext2fs_vnops.c > @@ -1247,7 +1247,6 @@ ext2fs_reclaim(void *v) > /* > * Purge old data structures associated with the inode. > */ > - cache_purge(vp); > if (ip->i_devvp) > vrele(ip->i_devvp); > >