Blame SOURCES/nfs-utils-1.3.0-mount-explicit-rback.patch

e19a30
diff -up nfs-utils-1.3.0/utils/mount/stropts.c.orig nfs-utils-1.3.0/utils/mount/stropts.c
e19a30
--- nfs-utils-1.3.0/utils/mount/stropts.c.orig	2017-06-01 11:24:19.925018714 -0400
e19a30
+++ nfs-utils-1.3.0/utils/mount/stropts.c	2017-06-01 11:25:20.033023121 -0400
e19a30
@@ -313,9 +313,10 @@ static int nfs_set_version(struct nfsmou
e19a30
 	if (!nfs_nfs_version(mi->options, &mi->version))
e19a30
 		return 0;
e19a30
 
e19a30
-	if (strncmp(mi->type, "nfs4", 4) == 0)
e19a30
+	if (strncmp(mi->type, "nfs4", 4) == 0) {
e19a30
 		mi->version.major = 4;
e19a30
-
e19a30
+		mi->version.v_mode = V_GENERAL;
e19a30
+	}
e19a30
 	/*
e19a30
 	 * Before 2.6.32, the kernel NFS client didn't
e19a30
 	 * support "-t nfs vers=4" mounts, so NFS version
e19a30
@@ -856,9 +857,6 @@ check_result:
e19a30
 	case EINVAL:
e19a30
 		/* A less clear indication that our client
e19a30
 		 * does not support NFSv4 minor version. */
e19a30
-		if (mi->version.v_mode == V_GENERAL &&
e19a30
-			mi->version.minor == 0)
e19a30
-				return result;
e19a30
 		if (mi->version.v_mode != V_SPECIFIC) {
e19a30
 			if (mi->version.minor > 0) {
e19a30
 				mi->version.minor--;
e19a30
@@ -880,6 +878,9 @@ check_result:
e19a30
 		/* UDP-Only servers won't support v4, but maybe it
e19a30
 		 * just isn't ready yet.  So try v3, but double-check
e19a30
 		 * with rpcbind for v4. */
e19a30
+		if (mi->version.v_mode == V_GENERAL)
e19a30
+			/* Mustn't try v2,v3 */
e19a30
+			return result;
e19a30
 		result = nfs_try_mount_v3v2(mi, TRUE);
e19a30
 		if (result == 0 && errno == EAGAIN) {
e19a30
 			/* v4 server seems to be registered now. */
e19a30
@@ -893,6 +894,9 @@ check_result:
e19a30
 	}
e19a30
 
e19a30
 fall_back:
e19a30
+	if (mi->version.v_mode == V_GENERAL)
e19a30
+		/* v2,3 fallback not allowed */
e19a30
+		return result;
e19a30
 	return nfs_try_mount_v3v2(mi, FALSE);
e19a30
 }
e19a30