Subject: Re: LK_SHARED for VFS_VGET/FHTOVP
To: None <wrstuden@netbsd.org>
From: YAMAMOTO Takashi <yamt@mwd.biglobe.ne.jp>
List: tech-kern
Date: 05/27/2004 04:43:15
hi,

> Specifically with using exclusive locks, I think that the vnode system was 
> fine-grained. Perhaps not the best locking (we can get better parallelism, 
> perhaps), but correct. By changing things so we need big-lock, we take a 
> step back.

what's "the vnode system"?
the vnode interface itsself, or eachfilesystem implementation,
or something else?

> Over the years the vnode interface has gotten a reputation for being
> complicated and troublesome. When I was at NASA, I worked on cleaning lots
> of it up, and among other things we got production-ready layered file
> systems. Part of getting things to work was being an ass about locking,
> and making sure we did locking right in all places. "Right" meant 
> documenting what should happen and auditing all the code to match. To go 
> back to a comment you made about me believing documentation, I actually 
> tried to make sure the code and documentation matched (what I think 
> "should" happen). :-)
> 
> By encouraging us to break what documentation we have, we open the door to
> getting back into an untrusted, confusing mess. For instance, new 
> developers have to just "know" that it's "ok" to use shared locks for 
> reads, but not anything else.

documented where?

> 2) We don't know how bad things are. Sure, ffs_read() (and lfs_read())  
> only call ufs_update(), which is "ok" as long as we have big-lock. But we
> don't _know_ what the other file systems do, and what problems they have;  
> we haven't audited the other code. This uncertainty is one of my big
> concerns about things.

have you audited all of our filesystems at some point before Chuck changed
the code to use LK_SHARED?

> Oh, as an aside, I think in your patch you unlock at one point and then 
> re-lock with LK_SHARED. I think all you need to do is call VOP_LOCK() with 
> LK_DOWNGRADE or something like it - you can downgrade the exclusive lock 
> into a shared one. Also, since you have the exclusive lock, you can just 
> use VOP_LOCK() as no one will have initiated reclaiming in the mean time.

i think it's bad idea to allow to use arbitrary fancy lockmgr flags
for VOP_LOCK.

YAMAMOTO Takashi