]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/mount/network.c
Fix version fallback for unmount.
[nfs-utils.git] / utils / mount / network.c
index 49d3c6b26d63c33c4b83ae6f497e1fb2a809f87f..63d5f5acdebfbd3a78ef5acbd5439a7bd3e35fcc 100644 (file)
@@ -408,7 +408,8 @@ static int probe_port(clnt_addr_t *server, const unsigned long *versions,
                                        goto out_bad;
                        }
                }
                                        goto out_bad;
                        }
                }
-               if (rpc_createerr.cf_stat != RPC_PROGNOTREGISTERED)
+               if (rpc_createerr.cf_stat != RPC_PROGNOTREGISTERED &&
+                   rpc_createerr.cf_stat != RPC_PROGVERSMISMATCH)
                        goto out_bad;
 
                if (!prot) {
                        goto out_bad;
 
                if (!prot) {
@@ -585,27 +586,16 @@ int nfs_call_umount(clnt_addr_t *mnt_server, dirpath *argp)
        enum clnt_stat res = 0;
        int msock;
 
        enum clnt_stat res = 0;
        int msock;
 
-       switch (mnt_server->pmap.pm_vers) {
-       case 3:
-       case 2:
-       case 1:
-               if (!probe_mntport(mnt_server))
-                       return 0;
-               clnt = mnt_openclnt(mnt_server, &msock);
-               if (!clnt)
-                       return 0;
-               res = clnt_call(clnt, MOUNTPROC_UMNT,
-                               (xdrproc_t)xdr_dirpath, (caddr_t)argp,
-                               (xdrproc_t)xdr_void, NULL,
-                               TIMEOUT);
-               mnt_closeclnt(clnt, msock);
-               if (res == RPC_SUCCESS)
-                       return 1;
-               break;
-       default:
-               res = RPC_SUCCESS;
-               break;
-       }
+       if (!probe_mntport(mnt_server))
+               return 0;
+       clnt = mnt_openclnt(mnt_server, &msock);
+       if (!clnt)
+               return 0;
+       res = clnt_call(clnt, MOUNTPROC_UMNT,
+                       (xdrproc_t)xdr_dirpath, (caddr_t)argp,
+                       (xdrproc_t)xdr_void, NULL,
+                       TIMEOUT);
+       mnt_closeclnt(clnt, msock);
 
        if (res == RPC_SUCCESS)
                return 1;
 
        if (res == RPC_SUCCESS)
                return 1;