Subject: Re: Vnode locking issues
To: Julio M. Merino Vidal <jmmv84@gmail.com>
From: Bill Studenmund <wrstuden@netbsd.org>
List: tech-kern
Date: 08/30/2005 11:36:11
--z0eOaCaDLjvTGF2l
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, Aug 30, 2005 at 06:50:36PM +0200, Julio M. Merino Vidal wrote:
> Hi all,
>=20
> While implementing tmpfs' vnode operations, I think I've found
> several inconsistencies between the vnodeops(9) manual page
> and existing code (as seen in ufs and msdosfs, for example)
> as regards locking status.  I'm going to put these inconsistencies
> here so that we can either fix the manual page, the code or my
> understanding on the whole issue.

The canonical reference is supposed to be sys/kern/vnode_if.src.

> - vnodeops(9) says that vop_getattr receives a locked vnode,
>   which must remain locked on exit.  However, the operation
>   receives a locked or unlocked vnode, depending on the
>   situation.

Man page is wrong. vnode_if.src indicates that the vnode lock state is "=3D=
"=20
which means output is the same as input, either locked or unlocked.

> - vnodeops(9) says that vop_link's dvp is locked on entry and
>   should remain locked on exit.  However, file-systems do an
>   vput(dvp) before exiting the function, thus unlocking it.

vnode_if.src indicates that dvp is locked on entry and unlocked and=20
released on exit.

> - vnodeops(9) says that vop_rmdir should return with dvp and
>   vp locked.  However, file-systems do an vput of both
>   vnodes; this means that dvp is unlocked upon return and that
>   vp is possibly invalid (if it has been immediately reclaimed),
>   so it cannot be locked.

vnode_if.src indicates that both dvp and vp are vput() on exit.

> Comments?

Man page is wrong. :-)

Take care,

Bill

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

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (NetBSD)

iD8DBQFDFKcbWz+3JHUci9cRAhflAKCWoVA8weT55/fh6DEt1zd3ZvYWwACgiJZ+
aQi8RDxHNsZJcyJVEggcHAw=
=oKG7
-----END PGP SIGNATURE-----

--z0eOaCaDLjvTGF2l--