[PATCH 3/5] text-based mount options: Use new pmap stuffer when rewriting mount options

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

 



Call nfs_options2pmap() in nfs_rewrite_mount_options() instead of
open-coding the logic to convert mount options to a pmap struct.
The new nfs_options2pmap() function is more careful about avoiding
invalid mount option values, and handles multiply-specified transport
protocol options correctly.

Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
---

 utils/mount/stropts.c |   68 ++++---------------------------------------------
 1 files changed, 5 insertions(+), 63 deletions(-)

diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c
index bd127ab..99be0f3 100644
--- a/utils/mount/stropts.c
+++ b/utils/mount/stropts.c
@@ -322,19 +322,12 @@ static int nfs_is_permanent_error(int error)
  * Returns a new group of mount options if successful; otherwise
  * NULL is returned if some failure occurred.
  */
-static const char *nfs_transport_opttbl[] = {
-	"udp",
-	"tcp",
-	NULL,
-};
-
 static struct mount_options *nfs_rewrite_mount_options(char *str)
 {
 	struct mount_options *options;
 	char *option, new_option[64];
 	clnt_addr_t mnt_server = { };
 	clnt_addr_t nfs_server = { };
-	int p;
 
 	options = po_split(str);
 	if (!options) {
@@ -360,64 +353,13 @@ static struct mount_options *nfs_rewrite_mount_options(char *str)
 		memcpy(&mnt_server.saddr, &nfs_server.saddr,
 				sizeof(mnt_server.saddr));
 
-	option = po_get(options, "mountport");
-	if (option)
-		mnt_server.pmap.pm_port = atoi(option);
-	mnt_server.pmap.pm_prog = MOUNTPROG;
-	option = po_get(options, "mountvers");
-	if (option)
-		mnt_server.pmap.pm_vers = atoi(option);
-	option = po_get(options, "mountproto");
-	if (option) {
-		if (strcmp(option, "tcp") == 0) {
-			mnt_server.pmap.pm_prot = IPPROTO_TCP;
-			po_remove_all(options, "mountproto");
-		}
-		if (strcmp(option, "udp") == 0) {
-			mnt_server.pmap.pm_prot = IPPROTO_UDP;
-			po_remove_all(options, "mountproto");
-		}
-	}
+	nfs_options2pmap(options, &nfs_server.pmap, &mnt_server.pmap);
 
-	option = po_get(options, "port");
-	if (option) {
-		nfs_server.pmap.pm_port = atoi(option);
-		po_remove_all(options, "port");
-	}
+	/* The kernel NFS client doesn't support changing the RPC program
+	 * number for these services, so reset these fields before probing
+	 * the server's ports.  */
 	nfs_server.pmap.pm_prog = NFS_PROGRAM;
-
-	option = po_get(options, "nfsvers");
-	if (option) {
-		nfs_server.pmap.pm_vers = atoi(option);
-		po_remove_all(options, "nfsvers");
-	}
-	option = po_get(options, "vers");
-	if (option) {
-		nfs_server.pmap.pm_vers = atoi(option);
-		po_remove_all(options, "vers");
-	}
-	option = po_get(options, "proto");
-	if (option) {
-		if (strcmp(option, "tcp") == 0) {
-			nfs_server.pmap.pm_prot = IPPROTO_TCP;
-			po_remove_all(options, "proto");
-		}
-		if (strcmp(option, "udp") == 0) {
-			nfs_server.pmap.pm_prot = IPPROTO_UDP;
-			po_remove_all(options, "proto");
-		}
-	}
-	p = po_rightmost(options, nfs_transport_opttbl);
-	switch (p) {
-	case 1:
-		nfs_server.pmap.pm_prot = IPPROTO_UDP;
-		break;
-	case 2:
-		nfs_server.pmap.pm_prot = IPPROTO_TCP;
-		break;
-	}
-	po_remove_all(options, "tcp");
-	po_remove_all(options, "udp");
+	mnt_server.pmap.pm_prog = MOUNTPROG;
 
 	if (!probe_bothports(&mnt_server, &nfs_server)) {
 		errno = ESPIPE;

--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux