summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2020-09-30 17:08:34 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2020-09-30 17:08:34 +0000
commit4301a5a7941f736b30d3ebd79adf5499f203db0e (patch)
tree3646a759ea68566f3a913e972856777d51f581a1
parenta91812f69fb2a959cb702c5571b1e9f22699181d (diff)
Notes
-rw-r--r--sys/kern/vfs_cache.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/sys/kern/vfs_cache.c b/sys/kern/vfs_cache.c
index 015c298a7aeb6..be2cd07f1e75a 100644
--- a/sys/kern/vfs_cache.c
+++ b/sys/kern/vfs_cache.c
@@ -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;