svn commit: r366293 - head/sys/kern

Mateusz Guzik mjg at FreeBSD.org
Wed Sep 30 17:08:34 UTC 2020


Author: mjg
Date: Wed Sep 30 17:08:34 2020
New Revision: 366293
URL: https://svnweb.freebsd.org/changeset/base/366293

Log:
  cache: push the lock into cache_purge_impl

Modified:
  head/sys/kern/vfs_cache.c

Modified: head/sys/kern/vfs_cache.c
==============================================================================
--- head/sys/kern/vfs_cache.c	Wed Sep 30 16:11:37 2020	(r366292)
+++ head/sys/kern/vfs_cache.c	Wed Sep 30 17:08:34 2020	(r366293)
@@ -2173,7 +2173,7 @@ cache_purge_impl(struct vnode *vp)
 	TAILQ_INIT(&ncps);
 	vlp = VP2VNODELOCK(vp);
 	vlp2 = NULL;
-	mtx_assert(vlp, MA_OWNED);
+	mtx_lock(vlp);
 retry:
 	while (!LIST_EMPTY(&vp->v_cache_src)) {
 		ncp = LIST_FIRST(&vp->v_cache_src);
@@ -2220,13 +2220,10 @@ cache_has_entries(struct vnode *vp)
 void
 cache_purge(struct vnode *vp)
 {
-	struct mtx *vlp;
 
 	SDT_PROBE1(vfs, namecache, purge, done, vp);
 	if (!cache_has_entries(vp))
 		return;
-	vlp = VP2VNODELOCK(vp);
-	mtx_lock(vlp);
 	cache_purge_impl(vp);
 }
 
@@ -2239,22 +2236,18 @@ cache_purge_vgone(struct vnode *vp)
 	struct mtx *vlp;
 
 	VNPASS(VN_IS_DOOMED(vp), vp);
-	vlp = VP2VNODELOCK(vp);
 	if (cache_has_entries(vp)) {
-		mtx_lock(vlp);
 		cache_purge_impl(vp);
-		mtx_assert(vlp, MA_NOTOWNED);
 		return;
 	}
 
 	/*
 	 * Serialize against a potential thread doing cache_purge.
 	 */
+	vlp = VP2VNODELOCK(vp);
 	mtx_wait_unlocked(vlp);
 	if (cache_has_entries(vp)) {
-		mtx_lock(vlp);
 		cache_purge_impl(vp);
-		mtx_assert(vlp, MA_NOTOWNED);
 		return;
 	}
 	return;


More information about the svn-src-all mailing list