Subject: Re: CVS commit: src
To: None <wrstuden@netbsd.org>
From: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
List: tech-kern
Date: 06/24/2004 09:35:59
> > > > ... it as a requirement that file 
> > > > systems do real, hard-core locking. And given the state of things when I 
> > > > started, that was a very good thing.
> > > 
> > > why do you think that exposing a lock is a requirement?
> > 
> > I'd like to ask the same question differently.
> > 
> > Suppose a file system's VOP_LOCK() and VOP_UNLOCK()
> > are no-ops, and the file system can be trusted to
> > do the right thing (not really that hard) for the
> > primary VOPs (LOOKUP, READ, WRITE, etc). What
> > semantics would break?
> 
> Whatever access callers of the file system expected to be serialized that 
> now aren't. i.e. a case where a caller called VOP_LOCK() and expected an 
> exclusive lock is now in place. Especially if it expected that lock to be 
> held across a call to ltsleep().

yes, we have such callers, unfortunately.
they should be fixed eventually, IMO.

> Also, for things like delete and rename, would it be so easy? Or file 
> creation?

yes, it's easy.  see nfs client.

> > >From VOP_LOCK(9)
> >     VOP_LOCK() is used to serialise access to the
> >     file system such as to present two writes to
> >     the same file from happening at the same time.
> > 
> > Why? Is this a semantic of the file model? Or is
> > this a context to make things "easier" on the
> > underlying file system?
> 
> It is file system semantics. A call to write(2), barring errors, is 
> supposed to be atomic. Thus if you have two write calls that overlap, the 
> overlapping data are to have come from one call or the other, not some mix 
> of both.

because we use a single VOP_WRITE for write(2),
there's no need to expose vnode lock to upper layer for this reason.

YAMAMOTO Takashi