diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 539bffb6f312..5bf56ac7475d 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -1976,7 +1976,10 @@ vtryrecycle(struct vnode *vp, bool isvnlru) * will skip over it. */ VI_LOCK(vp); + vn_seqc_write_begin_locked(vp); + atomic_thread_fence_seq_cst(); if (vp->v_usecount) { + vn_seqc_write_end_locked(vp); VOP_UNLOCK(vp); vdropl_recycle(vp); vn_finished_write(vnmp); @@ -1992,6 +1995,7 @@ vtryrecycle(struct vnode *vp, bool isvnlru) counter_u64_add(direct_recycles_free_count, 1); vgonel(vp); } + vn_seqc_write_end_locked(vp); VOP_UNLOCK(vp); vdropl_recycle(vp); vn_finished_write(vnmp);