Date: Wed, 02 Jan 2008 10:22:28 -0600 From: Eric Anderson <anderson@freebsd.org> To: Danny Braniss <danny@cs.huji.ac.il> Cc: freebsd-hackers@freebsd.org Subject: Re: nfs v2/v3 and diskless boot problem Message-ID: <477BBA44.7030803@freebsd.org> In-Reply-To: <E1JA5JD-0007S6-6F@cs1.cs.huji.ac.il> References: <E1JA5JD-0007S6-6F@cs1.cs.huji.ac.il>
next in thread | previous in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?477BBA44.7030803>