diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2007-07-28 17:49:43 -0400 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2007-07-30 16:12:53 +1000 |
commit | a4b10d48a730fbc6ff62197facddccdf7e204610 (patch) | |
tree | ec3a5e96c9be37b16c9a61b45844a7005dd88638 /utils/mount/network.c | |
parent | 5e30f39229acd1cb9e5e6fa73c6adb34401866d3 (diff) | |
download | nfs-utils-a4b10d48a730fbc6ff62197facddccdf7e204610.tar.gz nfs-utils-a4b10d48a730fbc6ff62197facddccdf7e204610.tar.xz nfs-utils-a4b10d48a730fbc6ff62197facddccdf7e204610.zip |
umount.nfs: move nfs_call_umount to network.c
nfs_call_umount() is shared by nfsmount.c and nfsumount.c, and manages a
network function (building the RPC umount call to the server's MNT daemon).
So move it to network.c with other network-related functions.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Neil Brown <neilb@suse.de>
Diffstat (limited to 'utils/mount/network.c')
-rw-r--r-- | utils/mount/network.c | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/utils/mount/network.c b/utils/mount/network.c index ab8cfb7..b04491c 100644 --- a/utils/mount/network.c +++ b/utils/mount/network.c @@ -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; +} |