summaryrefslogtreecommitdiffstats
path: root/utils/mount
diff options
context:
space:
mode:
Diffstat (limited to 'utils/mount')
-rw-r--r--utils/mount/mount.c32
-rw-r--r--utils/mount/nfs_mount.h3
-rw-r--r--utils/mount/nfsmount.c3
3 files changed, 31 insertions, 7 deletions
diff --git a/utils/mount/mount.c b/utils/mount/mount.c
index 7d71e06..6717941 100644
--- a/utils/mount/mount.c
+++ b/utils/mount/mount.c
@@ -255,6 +255,26 @@ static void mount_error(char *node)
}
}
+static void start_statd()
+{
+ /* If /var/run/rpc.statd.pid exists and is non-empty,
+ * assume statd already running.
+ * If START_STATD not defined, or defined to a non-existent file,
+ * don't bother,
+ * else run that file (typically a shell script)
+ */
+ struct stat stb;
+ if (stat("/var/run/rpc.statd.pid", &stb) == 0 &&
+ stb.st_size > 0)
+ return;
+#ifdef START_STATD
+ if (stat(START_STATD, &stb) ==0 &&
+ S_ISREG(stb.st_mode) &&
+ (stb.st_mode & S_IXUSR))
+ system(START_STATD);
+#endif
+}
+
int main(int argc, char *argv[])
{
int c, flags = 0, nfs_mount_vers = 0, mnt_err = 1, fake = 0;
@@ -358,11 +378,13 @@ int main(int argc, char *argv[])
nfs_mount_vers = 4;
mnt_err = nfs4mount(spec, mount_point, &flags, &extra_opts, &mount_opts, 0);
}
- else {
- if (!strcmp(progname, "mount.nfs")) {
- mnt_err = nfsmount(spec, mount_point, &flags,
- &extra_opts, &mount_opts, &nfs_mount_vers, 0);
- }
+ else if (!strcmp(progname, "mount.nfs")) {
+ int need_statd = 0;
+ mnt_err = nfsmount(spec, mount_point, &flags,
+ &extra_opts, &mount_opts, &nfs_mount_vers,
+ 0, &need_statd);
+ if (!mnt_err && !fake && need_statd)
+ start_statd();
}
if (!mnt_err && !fake) {
diff --git a/utils/mount/nfs_mount.h b/utils/mount/nfs_mount.h
index 1fd74c8..1acb633 100644
--- a/utils/mount/nfs_mount.h
+++ b/utils/mount/nfs_mount.h
@@ -78,7 +78,8 @@ struct nfs_mount_data {
#define AUTH_GSS_SPKMP 390011
#endif
-int nfsmount(const char *, const char *, int *, char **, char **, int *, int);
+int nfsmount(const char *, const char *, int *, char **, char **, int *,
+ int, int *);
void mount_errors(char *, int, int);
#endif /* _NFS_MOUNT_H */
diff --git a/utils/mount/nfsmount.c b/utils/mount/nfsmount.c
index 6226f6c..0188caa 100644
--- a/utils/mount/nfsmount.c
+++ b/utils/mount/nfsmount.c
@@ -818,7 +818,7 @@ nfsmnt_check_compat(const struct pmap *nfs_pmap, const struct pmap *mnt_pmap)
int
nfsmount(const char *spec, const char *node, int *flags,
char **extra_opts, char **mount_opts, int *nfs_mount_vers,
- int running_bg)
+ int running_bg, int *need_statd)
{
static char *prev_bg_host;
char hostdir[1024];
@@ -1185,6 +1185,7 @@ noauth_flavors:
strcat(new_opts, cbuf);
*extra_opts = xstrdup(new_opts);
+ *need_statd = ! (data.flags & NFS_MOUNT_NONLM);
return 0;
/* abort */