summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2007-07-28 17:49:49 -0400
committerNeil Brown <neilb@suse.de>2007-07-30 16:12:53 +1000
commit4a986ff4663413c29ceee4b8b9355ea4bc169d71 (patch)
treeaea2613e46dbf26b28f14936da797fcfad957dd7
parenta4b10d48a730fbc6ff62197facddccdf7e204610 (diff)
downloadnfs-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.c27
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;
}