]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/mount/network.c
umount.nfs: move nfs_call_umount to network.c
[nfs-utils.git] / utils / mount / network.c
index ab8cfb751a021989721074486f8c87791415e280..b04491c7e38605c8a0056803eb4bea962d4eccef 100644 (file)
@@ -245,7 +245,7 @@ out_ok:
        return 1;
 }
 
-int probe_nfsport(clnt_addr_t *nfs_server)
+static int probe_nfsport(clnt_addr_t *nfs_server)
 {
        struct pmap *pmap = &nfs_server->pmap;
 
@@ -258,7 +258,7 @@ int probe_nfsport(clnt_addr_t *nfs_server)
                return probe_port(nfs_server, probe_nfs2_only, probe_udp_only);
 }
 
-int probe_mntport(clnt_addr_t *mnt_server)
+static int probe_mntport(clnt_addr_t *mnt_server)
 {
        struct pmap *pmap = &mnt_server->pmap;
 
@@ -362,3 +362,34 @@ int start_statd(void)
 
        return 0;
 }
+
+int nfs_call_umount(clnt_addr_t *mnt_server, dirpath *argp)
+{
+       CLIENT *clnt;
+       enum clnt_stat res = 0;
+       int msock;
+
+       switch (mnt_server->pmap.pm_vers) {
+       case 3:
+       case 2:
+       case 1:
+               if (!probe_mntport(mnt_server))
+                       goto out_bad;
+               clnt = mnt_openclnt(mnt_server, &msock);
+               if (!clnt)
+                       goto out_bad;
+               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 = 1;
+               break;
+       }
+ out_bad:
+       return res;
+}