svn commit: r366071 - in head/sys: contrib/openzfs/module/os/freebsd/zfs kern sys

Mateusz Guzik mjg at FreeBSD.org
Wed Sep 23 10:46:08 UTC 2020


Author: mjg
Date: Wed Sep 23 10:46:07 2020
New Revision: 366071
URL: https://svnweb.freebsd.org/changeset/base/366071

Log:
  cache: drop the force flag from purgevfs
  
  The optional scan is wasteful, thus it is removed altogether from unmount.
  
  Callers which always want it anyway remain unaffected.

Modified:
  head/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vfsops.c
  head/sys/kern/vfs_cache.c
  head/sys/kern/vfs_mount.c
  head/sys/kern/vfs_mountroot.c
  head/sys/sys/vnode.h

Modified: head/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vfsops.c
==============================================================================
--- head/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vfsops.c	Wed Sep 23 10:44:49 2020	(r366070)
+++ head/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vfsops.c	Wed Sep 23 10:46:07 2020	(r366071)
@@ -1532,7 +1532,7 @@ zfsvfs_teardown(zfsvfs_t *zfsvfs, boolean_t unmounting
 		 * 'z_parent' is self referential for non-snapshots.
 		 */
 #ifdef FREEBSD_NAMECACHE
-		cache_purgevfs(zfsvfs->z_parent->z_vfs, true);
+		cache_purgevfs(zfsvfs->z_parent->z_vfs);
 #endif
 	}
 

Modified: head/sys/kern/vfs_cache.c
==============================================================================
--- head/sys/kern/vfs_cache.c	Wed Sep 23 10:44:49 2020	(r366070)
+++ head/sys/kern/vfs_cache.c	Wed Sep 23 10:46:07 2020	(r366071)
@@ -295,9 +295,6 @@ static u_long __exclusive_cache_line	numcache;/* numbe
 u_int ncsizefactor = 2;
 SYSCTL_UINT(_vfs, OID_AUTO, ncsizefactor, CTLFLAG_RW, &ncsizefactor, 0,
     "Size factor for namecache");
-static u_int __read_mostly	ncpurgeminvnodes;
-SYSCTL_UINT(_vfs, OID_AUTO, ncpurgeminvnodes, CTLFLAG_RW, &ncpurgeminvnodes, 0,
-    "Number of vnodes below which purgevfs ignores the request");
 static u_int __read_mostly	ncsize; /* the size as computed on creation or resizing */
 
 struct nchstats	nchstats;		/* cache effectiveness statistics */
@@ -2142,7 +2139,6 @@ nchinit(void *dummy __unused)
 	    M_WAITOK | M_ZERO);
 	for (i = 0; i < numvnodelocks; i++)
 		mtx_init(&vnodelocks[i], "ncvn", NULL, MTX_DUPOK | MTX_RECURSE);
-	ncpurgeminvnodes = numbucketlocks * 2;
 
 	neglists = malloc(sizeof(*neglists) * numneglists, M_VFSCACHE,
 	    M_WAITOK | M_ZERO);
@@ -2369,14 +2365,11 @@ cache_rename(struct vnode *fdvp, struct vnode *fvp, st
  * Flush all entries referencing a particular filesystem.
  */
 void
-cache_purgevfs(struct mount *mp, bool force)
+cache_purgevfs(struct mount *mp)
 {
 	struct vnode *vp, *mvp;
 
 	SDT_PROBE1(vfs, namecache, purgevfs, done, mp);
-	if (!force && mp->mnt_nvnodelistsize <= ncpurgeminvnodes)
-		return;
-
 	/*
 	 * Somewhat wasteful iteration over all vnodes. Would be better to
 	 * support filtering and avoid the interlock to begin with.

Modified: head/sys/kern/vfs_mount.c
==============================================================================
--- head/sys/kern/vfs_mount.c	Wed Sep 23 10:44:49 2020	(r366070)
+++ head/sys/kern/vfs_mount.c	Wed Sep 23 10:46:07 2020	(r366071)
@@ -1808,7 +1808,6 @@ dounmount(struct mount *mp, int flags, struct thread *
 	mp->mnt_flag &= ~MNT_ASYNC;
 	mp->mnt_kern_flag &= ~MNTK_ASYNC;
 	MNT_IUNLOCK(mp);
-	cache_purgevfs(mp, false); /* remove cache entries for this file sys */
 	vfs_deallocate_syncvnode(mp);
 	error = VFS_UNMOUNT(mp, flags);
 	vn_finished_write(mp);

Modified: head/sys/kern/vfs_mountroot.c
==============================================================================
--- head/sys/kern/vfs_mountroot.c	Wed Sep 23 10:44:49 2020	(r366070)
+++ head/sys/kern/vfs_mountroot.c	Wed Sep 23 10:46:07 2020	(r366071)
@@ -326,9 +326,9 @@ vfs_mountroot_shuffle(struct thread *td, struct mount 
 	TAILQ_INSERT_TAIL(&mountlist, mpdevfs, mnt_list);
 	mtx_unlock(&mountlist_mtx);
 
-	cache_purgevfs(mporoot, true);
+	cache_purgevfs(mporoot);
 	if (mporoot != mpdevfs)
-		cache_purgevfs(mpdevfs, true);
+		cache_purgevfs(mpdevfs);
 
 	if (VFS_ROOT(mporoot, LK_EXCLUSIVE, &vporoot))
 		panic("vfs_mountroot_shuffle: Cannot find root vnode");
@@ -344,7 +344,7 @@ vfs_mountroot_shuffle(struct thread *td, struct mount 
 	/* Set up the new rootvnode, and purge the cache */
 	mpnroot->mnt_vnodecovered = NULL;
 	set_rootvnode();
-	cache_purgevfs(rootvnode->v_mount, true);
+	cache_purgevfs(rootvnode->v_mount);
 
 	if (mporoot != mpdevfs) {
 		/* Remount old root under /.mount or /mnt */

Modified: head/sys/sys/vnode.h
==============================================================================
--- head/sys/sys/vnode.h	Wed Sep 23 10:44:49 2020	(r366070)
+++ head/sys/sys/vnode.h	Wed Sep 23 10:46:07 2020	(r366071)
@@ -643,7 +643,7 @@ void	cache_purge_vgone(struct vnode *vp);
 void	cache_purge_negative(struct vnode *vp);
 void	cache_rename(struct vnode *fdvp, struct vnode *fvp, struct vnode *tdvp,
     struct vnode *tvp, struct componentname *fcnp, struct componentname *tcnp);
-void	cache_purgevfs(struct mount *mp, bool force);
+void	cache_purgevfs(struct mount *mp);
 int	change_dir(struct vnode *vp, struct thread *td);
 void	cvtstat(struct stat *st, struct ostat *ost);
 void	freebsd11_cvtnstat(struct stat *sb, struct nstat *nsb);


More information about the svn-src-head mailing list