text-based mount: Set addr= option in nfs_try_mount_foo()
authorChuck Lever <chuck.lever@oracle.com>
Fri, 12 Feb 2010 18:36:17 +0000 (13:36 -0500)
committerSteve Dickson <steved@redhat.com>
Fri, 12 Feb 2010 18:41:48 +0000 (13:41 -0500)
When retrying a mount request with a different server address, the
addr= option may change each time through the fg/bg loop.

Instead of setting the addr= option in nfs_validate_options(), set it
in nfs_try_mount_v2v3() and nfs_try_mount_v4().  This is much the
same thing we did recently with the version-specific mount options
which might change each time through the fg/bg retry loop.

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

index 4ffee48..fc1b0da 100644 (file)
@@ -563,10 +563,6 @@ static int nfs_sys_mount(struct nfsmount_info *mi, struct mount_options *opts)
                return 0;
        }
 
-       if (verbose)
-               printf(_("%s: trying text-based options '%s'\n"),
-                       progname, options);
-
        if (mi->fake)
                return 1;
 
@@ -585,6 +581,7 @@ static int nfs_sys_mount(struct nfsmount_info *mi, struct mount_options *opts)
  */
 static int nfs_try_mount_v3v2(struct nfsmount_info *mi)
 {
+       struct addrinfo *ai = mi->address;
        struct mount_options *options = po_dup(mi->options);
        int result = 0;
 
@@ -593,6 +590,11 @@ static int nfs_try_mount_v3v2(struct nfsmount_info *mi)
                return result;
        }
 
+       if (!nfs_append_addr_option(ai->ai_addr, ai->ai_addrlen, options)) {
+               errno = EINVAL;
+               goto out_fail;
+       }
+
        if (!nfs_fix_mounthost_option(options, mi->hostname)) {
                errno = EINVAL;
                goto out_fail;
@@ -613,6 +615,10 @@ static int nfs_try_mount_v3v2(struct nfsmount_info *mi)
                goto out_fail;
        }
 
+       if (verbose)
+               printf(_("%s: trying text-based options '%s'\n"),
+                       progname, *mi->extra_opts);
+
        if (!nfs_rewrite_pmap_mount_options(options))
                goto out_fail;
 
@@ -656,6 +662,11 @@ static int nfs_try_mount_v4(struct nfsmount_info *mi)
                }
        }
 
+       if (!nfs_append_addr_option(ai->ai_addr, ai->ai_addrlen, options)) {
+               errno = EINVAL;
+               goto out_fail;
+       }
+
        if (!nfs_append_clientaddr_option(ai->ai_addr, ai->ai_addrlen, options)) {
                errno = EINVAL;
                goto out_fail;
@@ -669,6 +680,10 @@ static int nfs_try_mount_v4(struct nfsmount_info *mi)
                goto out_fail;
        }
 
+       if (verbose)
+               printf(_("%s: trying text-based options '%s'\n"),
+                       progname, *mi->extra_opts);
+
        result = nfs_sys_mount(mi, options);
 
 out_fail: