[Bug 2059197] Re: Fix minor version parsing when '-t nfs4' and '-o vers=4.x' are used together

Matthew Ruffell 2059197 at bugs.launchpad.net
Wed Apr 3 02:37:11 UTC 2024


Attached is a debdiff for Focal which fixes this issue.

** Summary changed:

- Issue with nfs4.0 mounts after upgrade to 3.6
+ Fix minor version parsing when '-t nfs4' and '-o vers=4.x' are used together

** Summary changed:

- Fix minor version parsing when '-t nfs4' and '-o vers=4.x' are used together
+ mount.nfs: Fix minor version parsing when '-t nfs4' and '-o vers=4.x' are used together

** Description changed:

- Hello,
+ [Impact]
  
- On Ubuntu Server 20.04.6 LTS with the update of nfs-common package =>
- "nfs-common/focal-updates 1:1.3.4-2.5ubuntu3.5" to "nfs-common/focal-
- updates 1:1.3.4-2.5ubuntu3.6" I started having issues mounting ntf4.0
- volumes. The NFS server supports 4.0, 4.1 and 4.2
+ When specifying both '-t nfs4' and '-o vers=4.x' on the mount command
+ line, mount.nfs ignores any specific version set with '-o vers=4.x' or
+ '-o vers=4,minorversion=x', and simply attempts version negotiation,
+ which due to my recent changes in bug 2049262, would land on the highest
+ supported nfs version, likely 4.2.
  
- The issue appears when using '-t ntfs4' and setting the version using -o
- vers=.
+ Users who specify what version they want should get the version they ask
+ for, and thus, this is a regression introduced in 1:1.3.4-2.5ubuntu3.6.
  
- When using 1:1.3.4-2.5ubuntu3.5 I am able to use '-o vers' to set the version when using -t ntfs4 eg
-   mount -t nfs4 -o vers=4.0 -vvv SERVER.local:/srv/data /mnt/test
-     mount.nfs4: trying text-based options 'vers=4.0,addr=xx.xx.xx.xx,clientaddr=xx.xx.xx.xx'  
+ A workaround is to drop '-t nfs4' and to use mount.nfs directly instead,
+ i.e.:
  
-   mount -t nfs4 -o vers=4.1 -vvv SERVER.local:/srv/data /mnt/test
-     mount.nfs4: trying text-based options 'vers=4.1,addr=xx.xx.xx.xx,clientaddr=xx.xx.xx.xx'  
+ $ sudo mount.nfs -o vers=4.1 -vvv jammy-nfs-server:/ /mnt
  
- However after upgrading to 1:1.3.4-2.5ubuntu3.6 it always mounts as nfs4.2
-   mount -t nfs4 -o vers=4.0 -vvv SERVER.local:/srv/data /mnt/test
-   mount.nfs4: trying text-based options 'vers=4.2,addr=xx.xx.xx.xx,clientaddr=xx.xx.xx.xx'  
+ [Testcase]
  
-   mount -t nfs4 -o vers=4.1 -vvv SERVER.local:/srv/data /mnt/test
-   mount.nfs4: trying text-based options 'vers=4.2,addr=xx.xx.xx.xx,clientaddr=xx.xx.xx.xx'
+ Create two VMs, one jammy and one focal.
  
- I would have expected the specified version in -o vers to be used when
- using '-t nfs4'
+ The jammy VM will be the server.
  
- When using '-t nfs' I am able to mount volumes as nfs 4.0. I understand
- that 1:1.3.4-2.5ubuntu3.6 fixes version negotiation so maybe this isn't
- a bug and the intent with '-t nfs4' is to always use the highest
- version. If so please feel free to close the report
+ Server VM:
+ $ sudo hostnamectl set-hostname jammy-nfs-server
+ $ sudo apt update && sudo apt upgrade -y
+ $ sudo apt install nfs-kernel-server
+ $ sudo mkdir /export
+ $ sudo mkdir /export/users
+ $ sudo mkdir /home/users
+ $ sudo vi /etc/fstab # add the following line:
+ /home/users /export/users none bind 0 0
+ $ sudo mount -a
+ $ sudo vi /etc/exports # add the following lines:
+ /export 192.168.122.0/24(rw,fsid=0,no_subtree_check,sync)
+ /export/users 192.168.122.0/24(rw,nohide,insecure,no_subtree_check,sync)
+ $ sudo systemctl restart nfs-server.service
+ 
+ Focal VM:
+ $ sudo hostnamectl set-hostname focal-nfs-client
+ $ sudo apt update && sudo apt upgrade -y
+ $ sudo apt install nfs-common
+ 
+ And then try mounting with both '-t nfs4' and '-o vers=4.1':
+ 
+ $ sudo mount -t nfs4 -o vers=4.1 -vvv jammy-nfs-server:/ /mnt
+ mount.nfs4: timeout set for Wed Apr  3 00:51:23 2024
+ mount.nfs4: trying text-based options 'vers=4.2,addr=192.168.122.217,clientaddr=192.168.122.9'
+ 
+ and then try with both '-t nfs4' and '-o vers=4,minorversion=1':
+ 
+ $ sudo mount -t nfs4 -o vers=4,minorversion=1 -vvv jammy-nfs-server:/ /mnt
+ mount.nfs4: timeout set for Wed Apr  3 02:19:03 2024
+ mount.nfs4: trying text-based options 'minorversion=1,vers=4.2,addr=192.168.122.217,clientaddr=192.168.122.9'
+ 
+ In each of those mounts, it incorrectly uses protocol version 4.2,
+ instead of requested 4.1.
+ 
+ If you install the test packages in the following ppa:
+ 
+ https://launchpad.net/~mruffell/+archive/ubuntu/lp2059197-test
+ 
+ then vers should always be 4.1, instead of 4.2.
+ 
+ [Where problems can occur]
+ 
+ It is quite clear now that changing version negotiation and parsing is
+ quite problematic, after the number of regressions the previous
+ 1:1.3.4-2.5ubuntu3.6 caused the community, and the sheer number of
+ commits upstream took to resolve lingering issues.
+ 
+ We need to be careful, to make sure we don't introduce any further
+ regressions.
+ 
+ This time, we are only changing how mount.nfs parses and processes
+ command line arguments for version specification, and not changing
+ version negotiation itself. This could impact NFS clients, when they go
+ to mount NFS filesystems.
+ 
+ If a regression were to occur, then users might have to manually mount
+ their NFS filesystems or look into autofs. There should be no breaking
+ changes to any behaviour when mounting NFS filesystems.
+ 
+ There are no changes to nfs server.
+ 
+ [Other Info]
+ 
+ This was fixed multiple times, across the following three commits:
+ 
+ commit 1e3ca7fe199531a372bb8e1c1033d8973097be50
+ Author: NeilBrown <neilb at suse.com>
+ Date:   Wed Jul 26 13:47:42 2017 -0400
+ Subject: mount: move handling of "-t nfs4" into nfs_nfs_version()
+ Link: https://git.linux-nfs.org/?p=steved/nfs-utils.git;a=commitdiff;h=1e3ca7fe199531a372bb8e1c1033d8973097be50
+     
+ commit 050153ef6a86ff5ab06ef65be36336824a323779
+ Author: NeilBrown <neilb at suse.com>
+ Date:   Wed Jul 26 13:51:51 2017 -0400
+ Subject: mount: Fix problems with parsing minorversion=
+ Link: https://git.linux-nfs.org/?p=steved/nfs-utils.git;a=commitdiff;h=050153ef6a86ff5ab06ef65be36336824a323779
+     
+ commit 71b807e1a69940beb31fdeb481c2e54509e8bd32
+ Author: Steve Dickson <steved at redhat.com>
+ Date:   Thu Mar 1 13:52:47 2018 -0500
+ Subject: mount.nfs: minorversion setting is being ignored with the -t flag
+ Link: https://git.linux-nfs.org/?p=steved/nfs-utils.git;a=commitdiff;h=71b807e1a69940beb31fdeb481c2e54509e8bd32
+ 
+ Jammy has all of these, and does not need any fixes.

** Tags added: seg

** Patch added: "Debdiff for nfs-utils on Focal"
   https://bugs.launchpad.net/ubuntu/+source/nfs-utils/+bug/2059197/+attachment/5761398/+files/lp2059197_focal.debdiff

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to nfs-utils in Ubuntu.
https://bugs.launchpad.net/bugs/2059197

Title:
  mount.nfs: Fix minor version parsing when '-t nfs4' and '-o vers=4.x'
  are used together

Status in nfs-utils package in Ubuntu:
  Fix Released
Status in nfs-utils source package in Focal:
  In Progress

Bug description:
  [Impact]

  When specifying both '-t nfs4' and '-o vers=4.x' on the mount command
  line, mount.nfs ignores any specific version set with '-o vers=4.x' or
  '-o vers=4,minorversion=x', and simply attempts version negotiation,
  which due to my recent changes in bug 2049262, would land on the
  highest supported nfs version, likely 4.2.

  Users who specify what version they want should get the version they
  ask for, and thus, this is a regression introduced in
  1:1.3.4-2.5ubuntu3.6.

  A workaround is to drop '-t nfs4' and to use mount.nfs directly
  instead, i.e.:

  $ sudo mount.nfs -o vers=4.1 -vvv jammy-nfs-server:/ /mnt

  [Testcase]

  Create two VMs, one jammy and one focal.

  The jammy VM will be the server.

  Server VM:
  $ sudo hostnamectl set-hostname jammy-nfs-server
  $ sudo apt update && sudo apt upgrade -y
  $ sudo apt install nfs-kernel-server
  $ sudo mkdir /export
  $ sudo mkdir /export/users
  $ sudo mkdir /home/users
  $ sudo vi /etc/fstab # add the following line:
  /home/users /export/users none bind 0 0
  $ sudo mount -a
  $ sudo vi /etc/exports # add the following lines:
  /export 192.168.122.0/24(rw,fsid=0,no_subtree_check,sync)
  /export/users 192.168.122.0/24(rw,nohide,insecure,no_subtree_check,sync)
  $ sudo systemctl restart nfs-server.service

  Focal VM:
  $ sudo hostnamectl set-hostname focal-nfs-client
  $ sudo apt update && sudo apt upgrade -y
  $ sudo apt install nfs-common

  And then try mounting with both '-t nfs4' and '-o vers=4.1':

  $ sudo mount -t nfs4 -o vers=4.1 -vvv jammy-nfs-server:/ /mnt
  mount.nfs4: timeout set for Wed Apr  3 00:51:23 2024
  mount.nfs4: trying text-based options 'vers=4.2,addr=192.168.122.217,clientaddr=192.168.122.9'

  and then try with both '-t nfs4' and '-o vers=4,minorversion=1':

  $ sudo mount -t nfs4 -o vers=4,minorversion=1 -vvv jammy-nfs-server:/ /mnt
  mount.nfs4: timeout set for Wed Apr  3 02:19:03 2024
  mount.nfs4: trying text-based options 'minorversion=1,vers=4.2,addr=192.168.122.217,clientaddr=192.168.122.9'

  In each of those mounts, it incorrectly uses protocol version 4.2,
  instead of requested 4.1.

  If you install the test packages in the following ppa:

  https://launchpad.net/~mruffell/+archive/ubuntu/lp2059197-test

  then vers should always be 4.1, instead of 4.2.

  [Where problems can occur]

  It is quite clear now that changing version negotiation and parsing is
  quite problematic, after the number of regressions the previous
  1:1.3.4-2.5ubuntu3.6 caused the community, and the sheer number of
  commits upstream took to resolve lingering issues.

  We need to be careful, to make sure we don't introduce any further
  regressions.

  This time, we are only changing how mount.nfs parses and processes
  command line arguments for version specification, and not changing
  version negotiation itself. This could impact NFS clients, when they
  go to mount NFS filesystems.

  If a regression were to occur, then users might have to manually mount
  their NFS filesystems or look into autofs. There should be no breaking
  changes to any behaviour when mounting NFS filesystems.

  There are no changes to nfs server.

  [Other Info]

  This was fixed multiple times, across the following three commits:

  commit 1e3ca7fe199531a372bb8e1c1033d8973097be50
  Author: NeilBrown <neilb at suse.com>
  Date:   Wed Jul 26 13:47:42 2017 -0400
  Subject: mount: move handling of "-t nfs4" into nfs_nfs_version()
  Link: https://git.linux-nfs.org/?p=steved/nfs-utils.git;a=commitdiff;h=1e3ca7fe199531a372bb8e1c1033d8973097be50
      
  commit 050153ef6a86ff5ab06ef65be36336824a323779
  Author: NeilBrown <neilb at suse.com>
  Date:   Wed Jul 26 13:51:51 2017 -0400
  Subject: mount: Fix problems with parsing minorversion=
  Link: https://git.linux-nfs.org/?p=steved/nfs-utils.git;a=commitdiff;h=050153ef6a86ff5ab06ef65be36336824a323779
      
  commit 71b807e1a69940beb31fdeb481c2e54509e8bd32
  Author: Steve Dickson <steved at redhat.com>
  Date:   Thu Mar 1 13:52:47 2018 -0500
  Subject: mount.nfs: minorversion setting is being ignored with the -t flag
  Link: https://git.linux-nfs.org/?p=steved/nfs-utils.git;a=commitdiff;h=71b807e1a69940beb31fdeb481c2e54509e8bd32

  Jammy has all of these, and does not need any fixes.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/nfs-utils/+bug/2059197/+subscriptions




More information about the foundations-bugs mailing list