freevnode(): lock the freeing vnode around destroy_vpollinfo()

to satisfy locking requirements of knlist manipulations.

Reported and tested by:	pho
Reviewed by:	markj
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Differential revision:	https://reviews.freebsd.org/D32761
This commit is contained in:
Konstantin Belousov 2021-11-02 04:49:13 +02:00
parent eede22d66d
commit d1d675cb30

View File

@ -1896,7 +1896,9 @@ freevnode(struct vnode *vp)
mac_vnode_destroy(vp);
#endif
if (vp->v_pollinfo != NULL) {
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
destroy_vpollinfo(vp->v_pollinfo);
VOP_UNLOCK(vp);
vp->v_pollinfo = NULL;
}
vp->v_mountedhere = NULL;