summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Dickson <steved@redhat.com>2018-03-01 13:52:47 -0500
committerSteve Dickson <steved@redhat.com>2018-03-01 13:52:47 -0500
commit71b807e1a69940beb31fdeb481c2e54509e8bd32 (patch)
tree98c882711c33f586239cce103f4fa20597bc4644
parentc1840e80a7000e3860401ff4afd3b48e4515aa6c (diff)
downloadnfs-utils-71b807e1a69940beb31fdeb481c2e54509e8bd32.tar.gz
mount.nfs: minorversion setting is being ignored with the -t flag
mount -t nfs or mount -t nfs4 and setting minorversion should set the v4 minor version. This patch adds a few checks to make sure the minor version is set. The patch also translate the minorversion= option to vers=4.x in the arguments passed to the kernel when the kernel is later then v3.4. Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--utils/mount/network.c15
-rw-r--r--utils/mount/stropts.c15
2 files changed, 25 insertions, 5 deletions
diff --git a/utils/mount/network.c b/utils/mount/network.c
index 8ab5be8..8d6e4c6 100644
--- a/utils/mount/network.c
+++ b/utils/mount/network.c
@@ -1275,8 +1275,8 @@ nfs_nfs_version(char *type, struct mount_options *options, struct nfs_version *v
}
}
- if (!found && strcmp(type, "nfs4") == 0)
- version_val = type + 3;
+ if (!found && strncmp(type, "nfs", 3) == 0)
+ version_val = "4";
else if (!found)
return 1;
else if (i <= 2 ) {
@@ -1308,9 +1308,14 @@ nfs_nfs_version(char *type, struct mount_options *options, struct nfs_version *v
if (!(version->minor = strtol(version_val, &cptr, 10)) && cptr == version_val)
goto ret_error;
version->v_mode = V_SPECIFIC;
- } else if (version->major > 3 && *cptr == '\0')
- version->v_mode = V_GENERAL;
-
+ } else if (version->major > 3 && *cptr == '\0') {
+ version_val = po_get(options, "minorversion");
+ if (version_val != NULL) {
+ version->minor = strtol(version_val, &cptr, 10);
+ version->v_mode = V_SPECIFIC;
+ } else
+ version->v_mode = V_GENERAL;
+ }
if (*cptr != '\0')
goto ret_error;
diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c
index 777de39..d1b0708 100644
--- a/utils/mount/stropts.c
+++ b/utils/mount/stropts.c
@@ -771,6 +771,21 @@ static int nfs_do_mount_v4(struct nfsmount_info *mi,
errno = EINVAL;
goto out_fail;
}
+ } else if (po_get(options, "minorversion") &&
+ linux_version_code() > MAKE_VERSION(3, 4, 0)) {
+ /*
+ * convert minorversion= into vers=4.x
+ */
+ po_remove_all(options, "minorversion");
+
+ snprintf(version_opt, sizeof(version_opt) - 1,
+ "vers=%lu.%lu", mi->version.major,
+ mi->version.minor);
+
+ if (po_append(options, version_opt) == PO_FAILED) {
+ errno = EINVAL;
+ goto out_fail;
+ }
}
if (!nfs_append_addr_option(sap, salen, options)) {