Subject: Re: nfsd: locking botch in op %d
To: None <tech-kern@netbsd.org>
From: der Mouse <mouse@Rodents.Montreal.QC.CA>
List: tech-kern
Date: 03/13/2001 18:29:25
>> Actually, I can't help wondering how this *ever* worked.  There was
>> a time when that diskless machine worked fine with my NFS server,
>> and I haven't changed anything since then that I can see affecting
>> this.
> Except you upgraded. :-)

I don't *think* so.  I've been using 2000-02-19 sources since, well,
February last year.  And I set up that NFS server a matter of weeks
ago.  I find it difficult to believe I had a kernel a year old still
kicking around.

What's more, I don't think I touched *anything* on the server between
setting it up and noticing the crash.

Well, not that it matters much.

>>> Could you try changing the genfs_no{,is,un}lock{,ed} calls into the
>>> real-lock varieties and see what happens?
>> I didn't try that, since [...]
> If you can, please try it.

I probably can.  Would you rather I make the no* routines do real
locking, or that I change specfs's vnopeops to use the real-locking
routines?

Do you also want me to back out the VOP_UNLOCK I added?  (Presumably,
since otherwise, what's to tell whether it works?)

>> What I did do, and it seems to have made the problem go away, is
>> +++ ufs_vnops.c	Tue Mar 13 01:00:13 2001
>> +			VOP_UNLOCK(vp,0);
> That actually is the other way to fix the problem, though with doing
> this the vput really should be a vrele() (since otherwise you're
> implicitly relying on specfs using the nolock routines :-)

Ah, now, that's the sort of thing I meant when I wrote of someone
actually understanding the code. :-)

> We either: 1) [...], 2) [...], or 3) [...]

Actually, why mess with the v_op pointer at all?  (I don't understand
the code enough to see why that's being done.)

					der Mouse

			       mouse@rodents.montreal.qc.ca
		     7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B