Re: [BISECT BUG] NFS v4 root not working after 6d972518b821 ("NFS: Add fs_context support.")

From: Trond Myklebust
Date: Fri Jan 17 2020 - 10:17:33 EST


On Fri, 2020-01-17 at 15:12 +0000, David Howells wrote:
> Krzysztof Kozlowski <krzk@xxxxxxxxxx> wrote:
>
> > mount.nfs4 -o vers=4,nolock 192.168.1.10:/srv/nfs/odroidhc1
> > /new_root
>
> Okay, it looks like the mount command makes two attempts at mounting.
> Firstly, it does this:
>
> > [ 22.938314] NFSOP 'source=192.168.1.10:/srv/nfs/odroidhc1'
> > [ 22.942638] NFSOP 'nolock=(null)'
> > [ 22.945772] NFSOP 'vers=4.2'
> > [ 22.948660] NFSOP 'addr=192.168.1.10'
> > [ 22.952350] NFSOP 'clientaddr=192.168.1.12'
> > [ 22.956831] NFS4: Couldn't follow remote path
>
> Which accepts the "vers=4.2" parameter as there's no check that that
> is
> actually valid given the configuration, but then fails
> later. Secondly, it
> does this:
>
> > [ 22.971001] NFSOP 'source=192.168.1.10:/srv/nfs/odroidhc1'
> > [ 22.975217] NFSOP 'nolock=(null)'
> > [ 22.978444] NFSOP 'vers=4'
> > [ 22.981265] NFSOP 'minorversion=1'
> > [ 22.984513] NFS: Value for 'minorversion' out of range
> > mount.nfs4: Numerical result out of range
>
> which fails because of the minorversion=1 specification, where the
> kernel
> config didn't enable NFS_V4_1.
>
> It looks like it ought to have failed prior to these patches in the
> same way:
>
> case Opt_minorversion:
> if (nfs_get_option_ul(args, &option))
> goto out_invalid_value;
> if (option > NFS4_MAX_MINOR_VERSION)
> goto out_invalid_value;
> mnt->minorversion = option;
> break;
>

It looks like someone changed the return value from the old EINVAL to
something else? The "Numerical result out of range" message above
suggests it has been changed to EOVERFLOW, which probably is not
supported by 'mount'.

--
Trond Myklebust
Linux NFS client maintainer, Hammerspace
trond.myklebust@xxxxxxxxxxxxxxx