svn commit: r184590 - in stable/7/sys: . kern ufs/ffs

Konstantin Belousov kib at FreeBSD.org
Mon Nov 3 06:08:09 PST 2008


Author: kib
Date: Mon Nov  3 14:08:08 2008
New Revision: 184590
URL: http://svn.freebsd.org/changeset/base/184590

Log:
  MFC r184074:
  Assert that v_holdcnt is non-zero before entering lockmgr in vn_lock and
  ffs_lock. This cannot catch situations where holdcnt is incremented not
  by curthread, but I think it is useful.
  
  Approved by:	re (kensmith)

Modified:
  stable/7/sys/   (props changed)
  stable/7/sys/kern/vfs_vnops.c
  stable/7/sys/ufs/ffs/ffs_vnops.c

Modified: stable/7/sys/kern/vfs_vnops.c
==============================================================================
--- stable/7/sys/kern/vfs_vnops.c	Mon Nov  3 10:39:35 2008	(r184589)
+++ stable/7/sys/kern/vfs_vnops.c	Mon Nov  3 14:08:08 2008	(r184590)
@@ -800,6 +800,10 @@ _vn_lock(struct vnode *vp, int flags, st
 	do {
 		if ((flags & LK_INTERLOCK) == 0)
 			VI_LOCK(vp);
+#ifdef DEBUG_VFS_LOCKS
+		KASSERT(vp->v_holdcnt != 0,
+		    ("vn_lock %p: zero hold count", vp));
+#endif
 		if ((flags & LK_NOWAIT || (flags & LK_TYPE_MASK) == 0) &&
 		    vp->v_iflag & VI_DOOMED) {
 			VI_UNLOCK(vp);

Modified: stable/7/sys/ufs/ffs/ffs_vnops.c
==============================================================================
--- stable/7/sys/ufs/ffs/ffs_vnops.c	Mon Nov  3 10:39:35 2008	(r184589)
+++ stable/7/sys/ufs/ffs/ffs_vnops.c	Mon Nov  3 14:08:08 2008	(r184590)
@@ -369,6 +369,10 @@ ffs_lock(ap)
 				VI_LOCK(vp);
 				flags |= LK_INTERLOCK;
 			}
+#ifdef DEBUG_VFS_LOCKS
+			KASSERT(vp->v_holdcnt != 0,
+			    ("ffs_lock %p: zero hold count", vp));
+#endif
 			lkp = vp->v_vnlock;
 			result = _lockmgr(lkp, flags, VI_MTX(vp), ap->a_td, ap->a_file, ap->a_line);
 			if (lkp == vp->v_vnlock || result != 0)


More information about the svn-src-stable mailing list