From owner-freebsd-fs@FreeBSD.ORG Sat May 17 17:53:24 2014 Return-Path: Delivered-To: freebsd-fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 161DB65B for ; Sat, 17 May 2014 17:53:24 +0000 (UTC) Received: from dmz-mailsec-scanner-6.mit.edu (dmz-mailsec-scanner-6.mit.edu [18.7.68.35]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 965CB28E1 for ; Sat, 17 May 2014 17:53:23 +0000 (UTC) X-AuditID: 12074423-f79916d000000c54-3e-5377a0dda3c1 Received: from mailhub-auth-1.mit.edu ( [18.9.21.35]) (using TLS with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by dmz-mailsec-scanner-6.mit.edu (Symantec Messaging Gateway) with SMTP id 74.DA.03156.DD0A7735; Sat, 17 May 2014 13:48:14 -0400 (EDT) Received: from outgoing.mit.edu (outgoing-auth-1.mit.edu [18.9.28.11]) by mailhub-auth-1.mit.edu (8.13.8/8.9.2) with ESMTP id s4HHmDJ4008666 for ; Sat, 17 May 2014 13:48:13 -0400 Received: from multics.mit.edu (system-low-sipb.mit.edu [18.187.2.37]) (authenticated bits=56) (User authenticated as kaduk@ATHENA.MIT.EDU) by outgoing.mit.edu (8.13.8/8.12.4) with ESMTP id s4HHmBka002759 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Sat, 17 May 2014 13:48:13 -0400 Received: (from kaduk@localhost) by multics.mit.edu (8.12.9.20060308) id s4HHmB8f026287; Sat, 17 May 2014 13:48:11 -0400 (EDT) Date: Sat, 17 May 2014 13:48:11 -0400 (EDT) From: Benjamin Kaduk X-X-Sender: kaduk@multics.mit.edu To: freebsd-fs@freebsd.org Subject: Add an assert that v_holdcnt >= v_usecount? Message-ID: User-Agent: Alpine 1.10 (GSO 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrNIsWRmVeSWpSXmKPExsUixCmqrHtvQXmwwcxLTBbHHv9kc2D0mPFp PksAYxSXTUpqTmZZapG+XQJXxt+r+xkLNrNXtJ/dytrA+Ju1i5GTQ0LAROLcvS/MELaYxIV7 69m6GLk4hARmM0kcPn6LEcI5xyhxYHkLE4Rzn0li4oRTzBBOA6PEpB+NTCD9LALaEktPHgaz 2QTUJB7vbYbaoSix+dQksB0iAlISM0++ZgexhYF2Tz72ESjOwcEr4Chx64g5SFhUQEdi9f4p LCA2r4CgxMmZT8BsZgFLiX9rf7FOYOSfhSQ1C0lqASPTKkbZlNwq3dzEzJzi1GTd4uTEvLzU Il0zvdzMEr3UlNJNjKAwY3dR3sH456DSIUYBDkYlHt4E+7JgIdbEsuLK3EOMkhxMSqK8crPK g4X4kvJTKjMSizPii0pzUosPMUpwMCuJ8GbOBsrxpiRWVqUW5cOkpDlYlMR531pbBQsJpCeW pGanphakFsFkZTg4lCR4hYHxJCRYlJqeWpGWmVOCkGbi4AQZzgM0/Op8kOHFBYm5xZnpEPlT jIpS4rz/QBICIImM0jy4XlgaeMUoDvSKMK8syAoeYAqB634FNJgJaPCbvaUgg0sSEVJSDYzW l1PXXiuMsIvQOFUqkVaY68zVI+9eGBqWl66aJdbSwGM0b/aZpPOL//XcMX/3w23f9t9Lladf Kwy6UTxhpn3CBYb7UglVjXf/V3r8v7fhqp7j+emCix4cP8v+gj8s+3nYZwWPxye+ZzEt37F0 5nXeG0bhr17tdG8982bD53txUwxvld85fG2OEktxRqKhFnNRcSIAupW8Y94CAAA= X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 17 May 2014 17:53:24 -0000 jhb was helping me debug a crashy openafs build in one of my VMs, and the symptoms seemed to indicate that a vnode had been partially destroyed before vgone() was called from vflush(), as if some buggy filesystem code had called vdrop() instead of vrele() or something similar. In a quick check, it didn't look like we had any assertions that would catch such bugs, so I tried adding something like this: Index: sys/kern/vfs_subr.c =================================================================== --- sys/kern/vfs_subr.c (revision 266330) +++ sys/kern/vfs_subr.c (working copy) @@ -2343,6 +2343,8 @@ if (vp->v_holdcnt <= 0) panic("vdrop: holdcnt %d", vp->v_holdcnt); vp->v_holdcnt--; + VNASSERT(vp->v_holdcnt >= vp->v_usecount, vp, + ("hold count less than use count")); if (vp->v_holdcnt > 0) { VI_UNLOCK(vp); return; Does that seem like something that would be generally useful? -Ben