[PATCH 10/19] autofs-5.1.8 - fix nfsv4 only mounts should not use rpcbind

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Commit 606795ecfaa1 ("autofs-5.1.7 - also require TCP_REQUESTED when
setting NFS port" together with commit 26fb6b5408be) caused NFSv4 only
mounts to also use rpcbind to probe availability which breaks the
requirememt that this type of mount not use rpcbind at all.

Fix this by treating fstype=nfs4 mounts as a special case which doesn't
use rpcbind.

Signed-off-by: Ian Kent <raven@xxxxxxxxxx>
---
 CHANGELOG            |    1 +
 include/replicated.h |    2 ++
 modules/mount_nfs.c  |   13 +++++++------
 modules/replicated.c |    4 ++--
 4 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 3b22937e..950eb7e7 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -6,6 +6,7 @@
 - fix nonstrict fail handling of last offset mount.
 - dont fail on duplicate offset entry tree add.
 - fix loop under run in cache_get_offset_parent().
+- fix nfsv4 only mounts should not use rpcbind.
 
 19/10/2021 autofs-5.1.8
 - add xdr_exports().
diff --git a/include/replicated.h b/include/replicated.h
index 95ff1f0d..f889a56a 100644
--- a/include/replicated.h
+++ b/include/replicated.h
@@ -35,6 +35,8 @@
 #define NFS3_REQUESTED		NFS3_SUPPORTED
 #define NFS4_REQUESTED		NFS4_SUPPORTED
 
+#define NFS4_ONLY_REQUESTED	0x0800
+
 #define TCP_SUPPORTED		0x0001
 #define UDP_SUPPORTED		0x0002
 #define TCP_REQUESTED		TCP_SUPPORTED
diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c
index 0ab87dcf..feb5afcd 100644
--- a/modules/mount_nfs.c
+++ b/modules/mount_nfs.c
@@ -92,7 +92,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
 	mount_default_proto = defaults_get_mount_nfs_default_proto();
 	vers = NFS_VERS_DEFAULT | NFS_PROTO_DEFAULT;
 	if (strcmp(fstype, "nfs4") == 0)
-		vers = NFS4_VERS_DEFAULT | TCP_SUPPORTED;
+		vers = NFS4_VERS_DEFAULT | TCP_SUPPORTED | NFS4_ONLY_REQUESTED;
 	else if (mount_default_proto == 4)
 		vers = vers | NFS4_VERS_DEFAULT;
 
@@ -157,15 +157,16 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
 			} else {
 				/* Is any version of NFSv4 in the options */
 				if (_strncmp("vers=4", cp, 6) == 0 ||
-				    _strncmp("nfsvers=4", cp, 9) == 0)
-					vers = NFS4_VERS_MASK | TCP_SUPPORTED;
-				else if (_strncmp("vers=3", cp, o_len) == 0 ||
+				    _strncmp("nfsvers=4", cp, 9) == 0) {
+					vers &= ~(NFS_VERS_MASK);
+					vers |= NFS4_VERS_MASK | TCP_SUPPORTED | NFS4_ONLY_REQUESTED;
+				} else if (_strncmp("vers=3", cp, o_len) == 0 ||
 					 _strncmp("nfsvers=3", cp, o_len) == 0) {
-					vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK);
+					vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK | NFS4_ONLY_REQUESTED);
 					vers |= NFS3_REQUESTED;
 				} else if (_strncmp("vers=2", cp, o_len) == 0 ||
 					 _strncmp("nfsvers=2", cp, o_len) == 0) {
-					vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK);
+					vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK | NFS4_ONLY_REQUESTED);
 					vers |= NFS2_REQUESTED;
 				} else if (strstr(cp, "port=") == cp &&
 					 o_len - 5 < 25) {
diff --git a/modules/replicated.c b/modules/replicated.c
index 09075dd0..cdb7c617 100644
--- a/modules/replicated.c
+++ b/modules/replicated.c
@@ -291,7 +291,7 @@ static unsigned int get_nfs_info(unsigned logopt, struct host *host,
 
 	rpc_info->proto = proto;
 	if (port < 0) {
-		if ((version & NFS4_REQUESTED) && (version & TCP_REQUESTED))
+		if (version & NFS4_REQUESTED && (version & NFS4_ONLY_REQUESTED))
 			rpc_info->port = NFS_PORT;
 		else
 			port = 0;
@@ -525,7 +525,7 @@ static int get_vers_and_cost(unsigned logopt, struct host *host,
 {
 	struct conn_info pm_info, rpc_info;
 	time_t timeout = RPC_TIMEOUT;
-	unsigned int supported, vers = (NFS_VERS_MASK | NFS4_VERS_MASK);
+	unsigned int supported, vers = (NFS_VERS_MASK | NFS4_VERS_MASK | NFS4_ONLY_REQUESTED);
 	int ret = 0;
 
 	if (!check_address_proto(logopt, host, version))





[Index of Archives]     [Linux Filesystem Development]     [Linux Ext4]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux