Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Oct 2010 16:20:40 +0300
From:      Kostik Belousov <kostikbel@gmail.com>
To:        Benjamin Kaduk <kaduk@mit.edu>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: [PATCH] Fix 'implicit declaration' warning and update vgone(9)
Message-ID:  <20101028132040.GV2392@deviant.kiev.zoral.com.ua>
In-Reply-To: <alpine.GSO.1.10.1010272322280.19200@multics.mit.edu>
References:  <1288160610.4280.18.camel@apollon> <AANLkTimCN%2BY4OsJRNvdmXidLu8XPHz5RydAhe0phvgnH@mail.gmail.com> <201010270912.47076.jhb@freebsd.org> <alpine.GSO.1.10.1010271043550.19200@multics.mit.edu> <20101027153402.GS2392@deviant.kiev.zoral.com.ua> <alpine.GSO.1.10.1010272322280.19200@multics.mit.edu>

next in thread | previous in thread | raw e-mail | index | archive | help

--rBv5AOddlEkG746b
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Wed, Oct 27, 2010 at 11:57:31PM -0400, Benjamin Kaduk wrote:
> On Wed, 27 Oct 2010, Kostik Belousov wrote:
>=20
> >On Wed, Oct 27, 2010 at 10:59:56AM -0400, Benjamin Kaduk wrote:
> >>[1] The old (racy) function is osi_TryEvictVCache, here:
> >>http://git.openafs.org/?p=3Dopenafs.git;a=3Dblob;f=3Dsrc/afs/FBSD/osi_v=
cache.c;h=3Dc2060c74f0155a610d2ea94f3c7f508e8ca4373a;hb=3DHEAD
> >The function looks very strange for much more serious reasons. Why do you
> >try to manage the vnode revocation in the filesystem module at all ?
>=20
> I am still becoming familiar with the AFS code, but I think this is=20
> largely due to a difference in the vfs structure that AFS has been using=
=20
> and the FreeBSD standard.  E.g. vop_inactive/vop_reclaim do not actually=
=20
> free filesystem-specific resources, instead keeping a free list of=20
> "vcache" entries.  So, the original authors of this AFS code were=20
> approaching the problem in a somewhat different way.
> Therefore, are somewhat-orthogonal pools of vcaches and vnodes (with some=
=20
> intersection).  If the vcaches are all in use in use, there is a routine=
=20
> which tries to "shake some loose"; if it can free up vcaches, their=20
> associated vnodes also need to be cleaned up in some fashion.  It may be=
=20
> that no additional code is actually needed to do this, though -- I am not=
=20
> sure.
I think the best would be to move the code to vop_reclaim(), possibly calli=
ng
vgone() from vop_inactivate().

>=20
> >VFS will (assumedly in a right way) revoke and destroy non-referenced
> >vnodes when needed.
> >
>=20
> You are, in essence, suggesting that the body of the conditional should=
=20
> be just "return 1;"?  (In my incomplete testing the vref() call was alway=
s=20
> made.)
See above.

>=20
> >Anyway, you need to hold vnode lock before checking for the vnode=20
> >refcounter.
> >See the vfs_subr.c:vlrureclaim() for the correct dance with=20
> >vholdl()/vn_lock()
> >sequence that does the revocation I mentioned in the race-free way.
>=20
> Unless I am mistaken, the path you refer to still uses vgonel(), which is=
=20
> not available to me.  Is it safe to drop and reaquire the interlock=20
> between the vgone and vdrop?
vgonel() use is an optimization to avoid dropping/reacquiring the vnode
interlock. Correct code can call vdrop() after vgone() call, without
doing anything with interlock. Please note that vnode lock should be
dropped between vgone and vdrop.

--rBv5AOddlEkG746b
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (FreeBSD)

iEYEARECAAYFAkzJeKYACgkQC3+MBN1Mb4hsrgCdFQG74NlbbWc11/wK8dqwOrRq
1rcAoINyikHIyz7RRAPGQOdFSXlncjPE
=cEbt
-----END PGP SIGNATURE-----

--rBv5AOddlEkG746b--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20101028132040.GV2392>