svn commit: r216430 - stable/8/sys/fs/nfsserver

Rick Macklem rmacklem at
Tue Dec 14 13:45:57 UTC 2010

Author: rmacklem
Date: Tue Dec 14 13:45:57 2010
New Revision: 216430

  MFC: r216330
  Disable attempts to establish a callback connection from the
  experimental NFSv4 server to a NFSv4 client when delegations are not
  being issued, even if the client advertises a callback path.
  This avoids a problem where a Linux client advertises a
  callback path that doesn't work, due to a firewall, and then
  times out an Open attempt before the FreeBSD server gives up
  its callback connection attempt. (Suggested by
  drb at The server should probably have
  a 1sec timeout on callback connection attempts when there are
  no delegations issued to the client, but that patch will require
  changes to the krpc and this serves as a work around until then.
  Tested by:	drb at
  Approved by:	re (kib)

Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)

Modified: stable/8/sys/fs/nfsserver/nfs_nfsdstate.c
--- stable/8/sys/fs/nfsserver/nfs_nfsdstate.c	Tue Dec 14 10:06:28 2010	(r216429)
+++ stable/8/sys/fs/nfsserver/nfs_nfsdstate.c	Tue Dec 14 13:45:57 2010	(r216430)
@@ -147,12 +147,20 @@ nfsrv_setclient(struct nfsrv_descript *n
 	if (nfsrv_openpluslock > NFSRV_V4STATELIMIT)
 		return (NFSERR_RESOURCE);
-	if ((nd->nd_flag & ND_GSS) && nfsrv_nogsscallback)
+	if (nfsrv_issuedelegs == 0 ||
+	    ((nd->nd_flag & ND_GSS) != 0 && nfsrv_nogsscallback != 0))
-		 * Don't do callbacks for AUTH_GSS.
-		 * (Since these aren't yet debugged, they might cause the
-		 *  server to crap out, if they get past the Init call to
-		 *  the client.)
+		 * Don't do callbacks when delegations are disabled or
+		 * for AUTH_GSS unless enabled via nfsrv_nogsscallback.
+		 * If establishing a callback connection is attempted
+		 * when a firewall is blocking the callback path, the
+		 * server may wait too long for the connect attempt to
+		 * succeed during the Open. Some clients, such as Linux,
+		 * may timeout and give up on the Open before the server
+		 * replies. Also, since AUTH_GSS callbacks are not
+		 * yet interoperability tested, they might cause the
+		 * server to crap out, if they get past the Init call to
+		 * the client.
 		new_clp->lc_program = 0;

More information about the svn-src-stable-8 mailing list