Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 3 Nov 2016 00:58:50 +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: r308241 - stable/10/sys/fs/nfsserver
Message-ID:  <201611030058.uA30wojs088988@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rmacklem
Date: Thu Nov  3 00:58:50 2016
New Revision: 308241
URL: https://svnweb.freebsd.org/changeset/base/308241

Log:
  MFC: r307694
  A problem w.r.t. interoperation between the FreeBSD NFSv4.1 server with
  delegations enabled and the Linux NFSv4.1 client was reported in
  reviews.freebsd.org/D7891.
  I believe that the FreeBSD server behaviour conforms to the RFC and that
  the Linux client has a bug. Therefore, I do not think the proposed patch
  is appropriate. When nfsrv_writedelegifpos is non-zero, the FreeBSD
  server will issue a write delegation for a read open if possible.
  The Linux client then erroneously assumes that the credentials used for
  the read open can write the file.
  This patch reverses the default value for nfsrv_writedelegifpos to 0 so
  that the default behaviour is Linux compatible and adds a sysctl that can
  be used to set nfsrv_writedelegifpos.
  
  This change should only affect users that are mounting a FreeBSD server
  with delegations enabled (they are not enabled by default) with a Linux
  NFSv4.1 client mount.

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

Modified: stable/10/sys/fs/nfsserver/nfs_nfsdstate.c
==============================================================================
--- stable/10/sys/fs/nfsserver/nfs_nfsdstate.c	Thu Nov  3 00:56:59 2016	(r308240)
+++ stable/10/sys/fs/nfsserver/nfs_nfsdstate.c	Thu Nov  3 00:58:50 2016	(r308241)
@@ -75,6 +75,11 @@ SYSCTL_INT(_vfs_nfsd, OID_AUTO, v4statel
     &nfsrv_v4statelimit, 0,
     "High water limit for NFSv4 opens+locks+delegations");
 
+static int	nfsrv_writedelegifpos = 0;
+SYSCTL_INT(_vfs_nfsd, OID_AUTO, writedelegifpos, CTLFLAG_RW,
+    &nfsrv_writedelegifpos, 0,
+    "Issue a write delegation for read opens if possible");
+
 /*
  * Hash lists for nfs V4.
  */
@@ -85,7 +90,6 @@ struct nfssessionhash		*nfssessionhash;
 
 static u_int32_t nfsrv_openpluslock = 0, nfsrv_delegatecnt = 0;
 static time_t nfsrvboottime;
-static int nfsrv_writedelegifpos = 1;
 static int nfsrv_returnoldstateid = 0, nfsrv_clients = 0;
 static int nfsrv_clienthighwater = NFSRV_CLIENTHIGHWATER;
 static int nfsrv_nogsscallback = 0;



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