summaryrefslogtreecommitdiffstats
path: root/utils/mount/network.c
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2007-07-16 16:28:51 -0400
committerNeil Brown <neilb@suse.de>2007-07-20 16:10:53 +1000
commit66ab98cbd17f7f54edda78a470579d3ab01f35c0 (patch)
tree9fa79dbd562a1abdb6aa7381a8339e31c47132ae /utils/mount/network.c
parent0dfc8a5426381c6d65aed4d9d0e50bae3238cc8f (diff)
downloadnfs-utils-66ab98cbd17f7f54edda78a470579d3ab01f35c0.tar.gz
nfs-utils-66ab98cbd17f7f54edda78a470579d3ab01f35c0.tar.xz
nfs-utils-66ab98cbd17f7f54edda78a470579d3ab01f35c0.zip
mount.nfs: Move start_statd into nfs_mount
Move start_startd into network.c, and move the call inside of nfs_mount, instead of immediately after - conceptually a better place for it. Also fix a minor nit: Since the mount actually fails if start_statd doesn't work, cause mount.nfs to exit with a status of EX_FAIL. Still need to do something about "running_bg" in nfsmount.c:nfsmount(). 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.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/utils/mount/network.c b/utils/mount/network.c
index c11fa3e..8da57d9 100644
--- a/utils/mount/network.c
+++ b/utils/mount/network.c
@@ -316,3 +316,48 @@ version_fixed:
goto out_bad;
return probe_mntport(mnt_server);
}
+
+static int probe_statd(void)
+{
+ struct sockaddr_in addr;
+ unsigned short port;
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sin_family = AF_INET;
+ addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ port = getport(&addr, 100024, 1, IPPROTO_UDP);
+
+ if (port == 0)
+ return 0;
+ addr.sin_port = htons(port);
+
+ if (clnt_ping(&addr, 100024, 1, IPPROTO_UDP, NULL) <= 0)
+ return 0;
+
+ return 1;
+}
+
+/*
+ * Attempt to start rpc.statd
+ */
+int start_statd(void)
+{
+#ifdef START_STATD
+ struct stat stb;
+#endif
+
+ if (probe_statd())
+ return 1;
+
+#ifdef START_STATD
+ if (stat(START_STATD, &stb) == 0) {
+ if (S_ISREG(stb.st_mode) && (stb.st_mode & S_IXUSR)) {
+ system(START_STATD);
+ if (probe_statd())
+ return 1;
+ }
+ }
+#endif
+
+ return 0;
+}