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