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-all
mailing list