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

Konstantin Belousov kostikbel at gmail.com
Wed Sep 23 16:44:39 UTC 2020


On Wed, Sep 23, 2020 at 10:46:07AM +0000, Mateusz Guzik wrote:
> 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);
Is there any checker for debugging kernels, that no cache entries are
left after unmount ?

>  	vn_finished_write(mp);


More information about the svn-src-head mailing list