diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2007-07-16 16:28:51 -0400 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2007-07-20 16:10:53 +1000 |
commit | 66ab98cbd17f7f54edda78a470579d3ab01f35c0 (patch) | |
tree | 9fa79dbd562a1abdb6aa7381a8339e31c47132ae /utils/mount/network.c | |
parent | 0dfc8a5426381c6d65aed4d9d0e50bae3238cc8f (diff) | |
download | nfs-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.c | 45 |
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; +} |