Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Mar 2006 17:15:59 GMT
From:      Miguel Lopes Santos Ramos <miguel@anjos.strangled.net>
To:        kris@obsecurity.org
Cc:        kuriyama@imgsrc.co.jp, freebsd-stable@freebsd.org
Subject:   Re: rpc.lockd brokenness (2)
Message-ID:  <200603131715.k2DHFxOe044623@compaq.anjos.strangled.net>
In-Reply-To: <20060310220452.GA33878@xor.obsecurity.org>

next in thread | previous in thread | raw e-mail | index | archive | help
> I did some further testing and it turns out that rpc.lockd is broken
> in some cases when operating over NFSv2 (this is the default for nfs
> root mounts).
>
> Tracing the lock traffic I see the client making a request, the server
> replying but the client never acting on the reply (or never receiving
> it), so it just retransmits every 20 seconds forever.

That is what I saw Friday, using the debug log mainly. I was expecting
to find some error message, but I only saw the repetition of something that
seemed to be ok. I tried vainly to look into rpc.lockd but it's not at all
simple.
But my greatest frustration was than when I started rpc.lockd with -d on the
client, the problem did never occur.

It didn't occur to me that the difference between this and other clients
was that the diskless mount is NFSv2.

I can't be 100% sure that the problem I have is the same you observed, but
locking works on this client on other mounts (home directories through amd,
NFSv3). It really seems an NFSv2 specific issue.

> I'm not yet sure whether this is a regression in 6.x or another case
> that was broken forever.

I didn't have problems in 5. I just compiled a 6.0-RELEASE kernel, and it
is also broken.

> Unfortunately there's currently no option to use NFSv3 for nfs root
> mounts to work around this (unless you're using bootp), but it should
> just be a trivial matter of adding "| NFSMNT_NFSV3" to the flags in
> nfsclient/nfs_diskless.c:nfs_setup_diskless():
>
> 	nd->root_args.flags = (NFSMNT_WSIZE | NFSMNT_RSIZE | NFSMNT_RESVPORT);

It was only today that I could try your sugestion. But... I get a kernel panic,
it can't find init...
Looking is nfsclient/bootp_subr.c, it looks like there's a little more to do
when mounting via NFSv3.

Well, this doesn't work, but thanks to your sugestion, by looking in
nfs_diskless.c, I found a loader option to disable lockd,
boot.nfsroot.options=lockd. This option is new (it doesn't exist on 6.0).
Now I can lock any file not only on /var, but also on /etc, etc. (remember
this option in fstab wasn't honored for the root mount)
Everything works. Locking in shared home directories also work, because they're
NFSv3 mounts (I tried it already...).

So, I finally have it working, and all I needed was having this in loader.conf:
boot.nfsroot.options=lockd.

I'm quite tired of this issue, so, for all I'm concerned, I'm done.

Is the NFSv2/rpc.lockd issue reported?
Is there any information more that I can provide?
I'm available for further information and testing if anyone can't reproduce
the bug. I'm glad you could, no daemons on my machine...
I failed finding a way to reproduce it on other machines using mount_nfs -2,
so aditional assistance may be needed to the developers.

If the problem is reported and no further information is needed from me,
then I can only thank you and congratulate you for your great effort in
understanding what was wrong and pointing a way to work around it.

Thank you, Kris,

Miguel



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200603131715.k2DHFxOe044623>