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; _______________________________________________ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"