Subject: Re: Why does specfs use genfs_nolock?
To: Jason Thorpe <thorpej@wasabisystems.com>
From: Bill Studenmund <wrstuden@netbsd.org>
List: tech-kern
Date: 09/02/2004 15:42:35
--dDRMvlgZJXvWKvBx
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Tue, Aug 31, 2004 at 10:31:26AM -0700, Jason Thorpe wrote:
> Any particular reason why specfs doesn't follow the locking protocol? =20
> (Sure leads to confusion when looking at code that use bdevvp() ...=20
> calls VOP_OPEN() without first vn_lock()'ing the vnode... and bdevvp()=20
> doesn't vn_lock() the vnode itself...).
I think because of aliasing. A comment from spec_vnops.c gives:
* This vnode operations vector is used for two things only:
* - special device nodes created from whole cloth by the kernel. =20
* - as a temporary vnodeops replacement for vnodes which were found to
* be aliased by callers of checkalias().
* For the ops vector for vnodes built from special devices found in a
* filesystem, see (e.g) ffs_specop_entries[] in ffs_vnops.c or the=20
* equivalent for other filesystems.
I think the checkalias() comment may be a little out of date.
The real problem is that when this code was made, locking was solely the=20
domain of the FS; lockmgr() locking was not there yet. So there was no=20
clear way to transfer lock state amongst nodes. aliased nodes are like=20
layered vnodes, except they don't have a vertical hierarcy. If anything,=20
they are siblings.
Take care,
Bill
--dDRMvlgZJXvWKvBx
Content-Type: application/pgp-signature
Content-Disposition: inline
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (NetBSD)
iD8DBQFBN6HbWz+3JHUci9cRAm4+AKCC5KcAyJcIzE9C7lQZFnAh1Zz/NACfQ1rB
6Y2vmoxzdZIH+UFSt8XR9+U=
=QsKm
-----END PGP SIGNATURE-----
--dDRMvlgZJXvWKvBx--