]> git.decadent.org.uk Git - nfs-utils.git/commitdiff
mount.nfs: Don't update extra_opts after text-based negotiation
authorChuck Lever <chuck.lever@oracle.com>
Tue, 14 Jul 2009 20:45:07 +0000 (16:45 -0400)
committerSteve Dickson <steved@redhat.com>
Tue, 14 Jul 2009 20:45:07 +0000 (16:45 -0400)
The umount.nfs command will negotiate the mount options again, so all
that is needed in /etc/mnttab is the original set of options used for
the mount, plus the additional mandatory options like addr=''.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
utils/mount/stropts.c

index e94265a67e96b6986d6c82de71817f78b04c1145..8d168db23b9ce7497a0f470a41d8e035baa79c4c 100644 (file)
@@ -283,7 +283,16 @@ static int nfs_validate_options(struct nfsmount_info *mi)
        if (!nfs_append_sloppy_option(mi->options))
                return 0;
 
        if (!nfs_append_sloppy_option(mi->options))
                return 0;
 
-       return nfs_append_addr_option(sap, salen, mi->options);
+       if (!nfs_append_addr_option(sap, salen, mi->options))
+               return 0;
+
+       /*
+        * Update option string to be recorded in /etc/mnttab
+        */
+       if (po_join(mi->options, mi->extra_opts) == PO_FAILED)
+               return 0;
+
+       return 1;
 }
 
 /*
 }
 
 /*
@@ -476,7 +485,7 @@ out:
  */
 static int nfs_try_mount(struct nfsmount_info *mi)
 {
  */
 static int nfs_try_mount(struct nfsmount_info *mi)
 {
-       char **extra_opts = mi->extra_opts;
+       char *options = NULL;
        int result;
 
        if (strncmp(mi->type, "nfs4", 4) != 0) {
        int result;
 
        if (strncmp(mi->type, "nfs4", 4) != 0) {
@@ -484,20 +493,20 @@ static int nfs_try_mount(struct nfsmount_info *mi)
                        return 0;
        }
 
                        return 0;
        }
 
-       if (po_join(mi->options, extra_opts) == PO_FAILED) {
+       if (po_join(mi->options, &options) == PO_FAILED) {
                errno = EIO;
                return 0;
        }
 
        if (verbose)
                printf(_("%s: trying text-based options '%s'\n"),
                errno = EIO;
                return 0;
        }
 
        if (verbose)
                printf(_("%s: trying text-based options '%s'\n"),
-                       progname, *extra_opts);
+                       progname, options);
 
        if (mi->fake)
                return 1;
 
        result = mount(mi->spec, mi->node, mi->type,
 
        if (mi->fake)
                return 1;
 
        result = mount(mi->spec, mi->node, mi->type,
-                       mi->flags & ~(MS_USER|MS_USERS), *extra_opts);
+                       mi->flags & ~(MS_USER|MS_USERS), options);
        if (verbose && result) {
                int save = errno;
                nfs_error(_("%s: mount(2): %s"), progname, strerror(save));
        if (verbose && result) {
                int save = errno;
                nfs_error(_("%s: mount(2): %s"), progname, strerror(save));