svn commit: r351622 - head/sys/kern

Mateusz Guzik mjg at FreeBSD.org
Fri Aug 30 00:45:54 UTC 2019


Author: mjg
Date: Fri Aug 30 00:45:53 2019
New Revision: 351622
URL: https://svnweb.freebsd.org/changeset/base/351622

Log:
  vfs: tidy up assertions in vfs_subr
  
  - assert unlocked vnode interlock in vref
  - assert right counts in vputx
  - print debug info for panic in vdrop
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  head/sys/kern/vfs_subr.c

Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c	Fri Aug 30 00:40:08 2019	(r351621)
+++ head/sys/kern/vfs_subr.c	Fri Aug 30 00:45:53 2019	(r351622)
@@ -2778,6 +2778,7 @@ void
 vref(struct vnode *vp)
 {
 
+	ASSERT_VI_UNLOCKED(vp, __func__);
 	CTR2(KTR_VFS, "%s: vp %p", __func__, vp);
 	_vhold(vp, false);
 	v_incr_usecount(vp);
@@ -2853,6 +2854,9 @@ vputx(struct vnode *vp, int func)
 	else
 		KASSERT(func == VPUTX_VRELE, ("vputx: wrong func"));
 	ASSERT_VI_UNLOCKED(vp, __func__);
+	VNASSERT(vp->v_holdcnt > 0 && vp->v_usecount > 0, vp,
+	    ("%s: wrong ref counts", __func__));
+
 	CTR2(KTR_VFS, "%s: vp %p", __func__, vp);
 
 	if (vp->v_type != VCHR &&
@@ -3069,8 +3073,10 @@ _vdrop(struct vnode *vp, bool locked)
 	else
 		ASSERT_VI_UNLOCKED(vp, __func__);
 	CTR2(KTR_VFS, "%s: vp %p", __func__, vp);
-	if ((int)vp->v_holdcnt <= 0)
-		panic("vdrop: holdcnt %d", vp->v_holdcnt);
+	if (__predict_false((int)vp->v_holdcnt <= 0)) {
+		vn_printf(vp, "vdrop: holdcnt %d", vp->v_holdcnt);
+		panic("vdrop: wrong holdcnt");
+	}
 	if (!locked) {
 		if (refcount_release_if_not_last(&vp->v_holdcnt))
 			return;


More information about the svn-src-all mailing list