Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 17 May 2014 22:57:59 +0200
From:      =?iso-8859-2?Q?Edward_Tomasz_Napiera=B3a?= <trasz@FreeBSD.org>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        freebsd-fs@freebsd.org, Benjamin Kaduk <bjk@freebsd.org>
Subject:   Re: Add an assert that v_holdcnt >= v_usecount?
Message-ID:  <071EBBB0-CDC5-47B6-A98C-5D4AD6A21855@FreeBSD.org>
In-Reply-To: <20140517192229.GA74331@kib.kiev.ua>
References:  <alpine.GSO.1.10.1405171326480.25244@multics.mit.edu> <20140517192229.GA74331@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
Wiadomo=B6=E6 napisana przez Konstantin Belousov w dniu 17 maj 2014, o =
godz. 21:22:
> On Sat, May 17, 2014 at 01:48:11PM -0400, Benjamin Kaduk wrote:
>> jhb was helping me debug a crashy openafs build in one of my VMs, and =
the=20
>> symptoms seemed to indicate that a vnode had been partially destroyed=20=

>> before vgone() was called from vflush(), as if some buggy filesystem =
code=20
>> had called vdrop() instead of vrele() or something similar.  In a =
quick=20
>> check, it didn't look like we had any assertions that would catch =
such=20
>> bugs, so I tried adding something like this:
>>=20
>> Index: sys/kern/vfs_subr.c
>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>> --- sys/kern/vfs_subr.c	(revision 266330)
>> +++ sys/kern/vfs_subr.c	(working copy)
>> @@ -2343,6 +2343,8 @@
>>  	if (vp->v_holdcnt <=3D 0)
>>  		panic("vdrop: holdcnt %d", vp->v_holdcnt);
>>  	vp->v_holdcnt--;
>> +	VNASSERT(vp->v_holdcnt >=3D vp->v_usecount, vp,
>> +	    ("hold count less than use count"));
>>  	if (vp->v_holdcnt > 0) {
>>  		VI_UNLOCK(vp);
>>  		return;
>>=20
>> Does that seem like something that would be generally useful?
>=20
> This is reasonable.
>=20
> As a note, I never seen such corruption of the otherwise valid vnode =
state=20
> ever.  There were a lot of leaks, but never mismatched vget/vdrop.

In a filesystem that's already in the tree, or being developed by =
someone
who knows how VFS works - sure.  But assertions like this are great time
saver for someone who is new to VFS.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?071EBBB0-CDC5-47B6-A98C-5D4AD6A21855>