Re: make NFSv3 default now on diskless

From: Rick Macklem <rmacklem_at_uoguelph.ca>
Date: Thu, 02 Jun 2022 14:44:06 UTC
John-Mark Gurney <jmg@funkthat.com> wrote:
> I just booted FreeBSD-current diskless, using NFS root, and I ended
> up having issues because by default, NFS root is only v2.
>
> One of things that happened was disk space available was listed as
> -138G, or -144830429K.  I assume this is because the server is reporting
> TBs instead.
Yes. NFSv2 uses 32bit sizes.

> If I mount via mount_nfs, the sizes are normal/correct because it mounts
> v3.
I believe most specify "nfsv3" in the "/" mount line of /etc/fstab on the
remote root fs. Then, when the system does a "mount -u" to make it
read/write it gets toggled to NFSv3.

> The other issue that I ran into is that NFSv2 can't access >4GB files
> (or create them).
As above, NFSv2 uses 32bit sizes.

> Anyone object to adding BOOTP_NFSV3 to GENERIC?
Well, that option only works when used with BOOTP_NFSROOT.
The GENERIC configs for amd64, arm64,... use the other way.
(Just to make it confusing, there are two different ways an NFS root
 fs is set up.)
See below.

>  Or maybe making it a
> tunable that defaults to set, because it seems a bit crazy to default
> to v2 these days.
I don't think changing the default to NFSv3 will be a problem.
The reason it was NFSv2 was that,
for some non-FreeBSD NFS servers, the NFSv3 file handle is different
than the NFSv2 one.

I added NFSv3 support to stand/libsa/nfs.c about 15years ago, so every
system should be running the newer NFS code in the loader and be able
to do NFSv3 booting.

> This option was added in 432aad0e in 1997 so that the nfs_diskless
> structure didn't need to be filled out.  Does anything even
> populate/fill it out anymore?  I saw code in i386/i386/locore.s that
> does this, but it doesn't appear anywhere else.
Yes. For "options NFS_ROOT" (the other way), the loader uses
"stand/libsa/nfs.c" to acquire the remote file system's root file handle
and fills it in. (See nfs_setup_diskless() in sys/nfs/nfs_diskless.c.)
Looking at it, it appears to enable NFSv3 so long as it finds
"boot.nfsroot.nfshandlelen" set.

> There also appears to possibly be a way via mount options, but I can't
> see where it's documented to set them.
I think you just specify "nfsv3" as a mount option in the root fs
line in /etc/fstab on the root fs on the NFS server.

I don't think changing the default to NFSv3 will be a problem.
The hassle is testing the various cases, to make sure nothing
breaks. I have no diskless setup to do testing and I don't even know
when installs/upgrades actually replace the loader?

rick

--
  John-Mark Gurney                              Voice: +1 415 225 5579

     "All that I will do, has been done, All that I have, has not."