summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2009-11-03 11:16:30 -0500
committerSteve Dickson <steved@redhat.com>2009-11-03 11:16:30 -0500
commite4328bb8d13ae6dda33308557e6bbb352d5674bb (patch)
tree2170ed8f794d651939bef32a8dfa72fc583e3764
parent57af0cce3ed6f555bb40132d667e8b10d41855ca (diff)
downloadnfs-utils-e4328bb8d13ae6dda33308557e6bbb352d5674bb.tar.gz
nfs-utils-e4328bb8d13ae6dda33308557e6bbb352d5674bb.tar.xz
nfs-utils-e4328bb8d13ae6dda33308557e6bbb352d5674bb.zip
mount.nfs: Assume v2/v3 if mount-related options are present
Don't try NFSv4 if any MNT protocol related options were presented by the user. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--utils/mount/stropts.c49
1 files changed, 35 insertions, 14 deletions
diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c
index 3a2a237..4c9ee17 100644
--- a/utils/mount/stropts.c
+++ b/utils/mount/stropts.c
@@ -278,6 +278,40 @@ static int nfs_append_sloppy_option(struct mount_options *options)
return 1;
}
+static int nfs_set_version(struct nfsmount_info *mi)
+{
+ if (!nfs_nfs_version(mi->options, &mi->version))
+ return 0;
+
+ if (strncmp(mi->type, "nfs4", 4) == 0)
+ mi->version = 4;
+ else {
+ char *option = po_get(mi->options, "proto");
+ if (option && strcmp(option, "rdma") == 0)
+ mi->version = 3;
+ }
+
+ /*
+ * If we still don't know, check for version-specific
+ * mount options.
+ */
+ if (mi->version == 0) {
+ if (po_contains(mi->options, "mounthost") ||
+ po_contains(mi->options, "mountaddr") ||
+ po_contains(mi->options, "mountvers") ||
+ po_contains(mi->options, "mountproto"))
+ mi->version = 3;
+ }
+
+ /*
+ * If enabled, see if the default version was
+ * set in the config file
+ */
+ nfs_default_version(mi);
+
+ return 1;
+}
+
/*
* Set up mandatory non-version specific NFS mount options.
*
@@ -294,21 +328,8 @@ static int nfs_validate_options(struct nfsmount_info *mi)
if (!nfs_name_to_address(mi->hostname, sap, &mi->salen))
return 0;
- if (!nfs_nfs_version(mi->options, &mi->version))
+ if (!nfs_set_version(mi))
return 0;
- if (strncmp(mi->type, "nfs4", 4) == 0)
- mi->version = 4;
- else {
- char *option = po_get(mi->options, "proto");
- if (option && strcmp(option, "rdma") == 0)
- mi->version = 3;
- }
-
- /*
- * If enabled, see if the default version was
- * set in the config file
- */
- nfs_default_version(mi);
if (!nfs_append_sloppy_option(mi->options))
return 0;