diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2007-07-28 17:49:49 -0400 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2007-07-30 16:12:53 +1000 |
commit | 4a986ff4663413c29ceee4b8b9355ea4bc169d71 (patch) | |
tree | aea2613e46dbf26b28f14936da797fcfad957dd7 | |
parent | a4b10d48a730fbc6ff62197facddccdf7e204610 (diff) | |
download | nfs-utils-4a986ff4663413c29ceee4b8b9355ea4bc169d71.tar.gz nfs-utils-4a986ff4663413c29ceee4b8b9355ea4bc169d71.tar.xz nfs-utils-4a986ff4663413c29ceee4b8b9355ea4bc169d71.zip |
Make sure nfs_call_umount's callers are handling its return code correctly
umount.nfs is treating nfs_call_umount's return code like a standard mount
return code (EX_SOMETHING) when its really an RPC return code.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Neil Brown <neilb@suse.de>
-rw-r--r-- | utils/mount/network.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/utils/mount/network.c b/utils/mount/network.c index b04491c..12fc762 100644 --- a/utils/mount/network.c +++ b/utils/mount/network.c @@ -363,6 +363,17 @@ int start_statd(void) return 0; } +/* + * nfs_call_umount - ask the server to remove a share from it's rmtab + * @mnt_server: address of RPC MNT program server + * @argp: directory path of share to "unmount" + * + * Returns one if the unmount call succeeded; zero if the unmount + * failed for any reason. + * + * Note that a side effect of calling this function is that rpccreateerr + * is set. + */ int nfs_call_umount(clnt_addr_t *mnt_server, dirpath *argp) { CLIENT *clnt; @@ -374,22 +385,24 @@ int nfs_call_umount(clnt_addr_t *mnt_server, dirpath *argp) case 2: case 1: if (!probe_mntport(mnt_server)) - goto out_bad; + return 0; clnt = mnt_openclnt(mnt_server, &msock); if (!clnt) - goto out_bad; + return 0; res = clnt_call(clnt, MOUNTPROC_UMNT, - (xdrproc_t) xdr_dirpath, (caddr_t)argp, - (xdrproc_t) xdr_void, NULL, + (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; + res = RPC_SUCCESS; break; } - out_bad: - return res; + + if (res == RPC_SUCCESS) + return 1; + return 0; } |