Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 4 Jun 2018 20:40:22 +0000 (UTC)
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r334633 - stable/10/sys/fs/nfsserver
Message-ID:  <201806042040.w54KeMtt051961@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rmacklem
Date: Mon Jun  4 20:40:22 2018
New Revision: 334633
URL: https://svnweb.freebsd.org/changeset/base/334633

Log:
  MFC: r333592
  Fix the eir_server_scope reply argument for NFSv4.1 ExchangeID.
  
  In the reply to an ExchangeID operation, the NFSv4.1 server returns a
  "scope" value (eir_server_scope). If this value is the same, it indicates
  that two servers share state, which is never the case for FreeBSD servers.
  As such, the value needs to be unique and it was without this patch.
  However, I just found out that it is not supposed to change when the
  server reboots and without this patch, it did change.
  This patch fixes eir_server_scope so that it does not change when the
  server is rebooted.
  The only affect not having this patch has is that Linux clients don't
  reclaim opens and locks after a server reboot, which meant they lost
  any byte range locks held before the server rebooted.
  It only affects NFSv4.1 mounts and the FreeBSD NFSv4.1 client was not
  affected by this bug.

Modified:
  stable/10/sys/fs/nfsserver/nfs_nfsdserv.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/fs/nfsserver/nfs_nfsdserv.c
==============================================================================
--- stable/10/sys/fs/nfsserver/nfs_nfsdserv.c	Mon Jun  4 20:39:58 2018	(r334632)
+++ stable/10/sys/fs/nfsserver/nfs_nfsdserv.c	Mon Jun  4 20:40:22 2018	(r334633)
@@ -3800,9 +3800,9 @@ nfsrvd_exchangeid(struct nfsrv_descript *nd, __unused 
 		txdr_hyper(owner_minor, tl);			/* Minor */
 		(void)nfsm_strtom(nd, nd->nd_cred->cr_prison->pr_hostuuid,
 		    strlen(nd->nd_cred->cr_prison->pr_hostuuid)); /* Major */
-		NFSM_BUILD(tl, uint32_t *, 3 * NFSX_UNSIGNED);
-		*tl++ = txdr_unsigned(NFSX_UNSIGNED);
-		*tl++ = time_uptime;		/* Make scope a unique value. */
+		(void)nfsm_strtom(nd, nd->nd_cred->cr_prison->pr_hostuuid,
+		    strlen(nd->nd_cred->cr_prison->pr_hostuuid)); /* Scope */
+		NFSM_BUILD(tl, uint32_t *, NFSX_UNSIGNED);
 		*tl = txdr_unsigned(1);
 		(void)nfsm_strtom(nd, "freebsd.org", strlen("freebsd.org"));
 		(void)nfsm_strtom(nd, version, strlen(version));



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201806042040.w54KeMtt051961>