nfs v2/v3 and diskless boot problem
Eric Anderson
anderson at freebsd.org
Wed Jan 2 08:22:42 PST 2008
Danny Braniss wrote:
>> Danny Braniss wrote:
>>> there is an undocumented option:
>>> boot-nfsroot-options
>>> that the diskeless boot can use. I tried
>>> boot-nfsroot-options = "nfsv3"
>>> since the pxeboot does the initial mount via nfsv2, and this has at least
>>> one problem: removing a file from the readonly / will hang the system.
>>>
>>> so, the remount to v3 works in the case that the root is served by a Freebsd
>>> nfs server, but fails if it's NetAPP. The reason is that the v2 filehandle
>>> is 32 bytes, and when switching to V3 it becomes 28bytes - sizeof(fhandle_t).
>>> This is not liked by the NetApp, which correctly gives error 1001: BADHANDLE
>>> :-)
>>>
>>> While I'm trying to come up with a solution, I am wondering if someone
>>> can shed some light:
>>> - is sizeof(fhandle_t) == 28 bytes is mystical, or changing it to
>>> 32 bytes will start WW3?
>>
>> NFSv3 file handles (by spec) can be up to 64bytes.
>
> true, but in freebsd, look at sys/nfs/nfsproto.h
> #define NFSX_V2FH 32
> #define NFSX_V3FH (sizeof (fhandle_t))
> #define NFSX_V4FH 128
>
> so for v3 it's 28 bytes. (fhandle_t is defined in sys/mount.h)
>
>
>> I'm not 100% sure what is happening, but it sounds like the file handle
>> for the mount point or maybe one of the directories is not getting reset
>> on remount.
>>
>> When do you get the BADHANDLE error? Can you capture a
>> tshark/wireshark/tcpdump of the remount and error?
>
> I did, and if you look in sys/nfsclient/nfs_vfsops.c, nfs_convert_diskless is responsible
> for chopping off the 4 extra bytes. BTW, I tried to change the bcopy count to NFSX_V2FH/32, and
> it panics the kernel :-(
>
> danny
oh - looks like this says it all:
http://fxr.googlebit.com/source/sys/nfsclient/nfsdiskless.h?v=8-CURRENT#L51
Snippet:
51 /*
52 * I have defined a new structure that can handle an NFS Version 3
file handle
53 * but the kernel still expects the old Version 2 one to be
provided. The
54 * changes required in nfs_vfsops.c for using the new are
documented there in
55 * comments. (I felt that breaking network booting code by changing
this
56 * structure would not be prudent at this time, since almost all
servers are
57 * still Version 2 anyhow.)
58 */
Eric
More information about the freebsd-hackers
mailing list