diff options
Diffstat (limited to 'utils/mount')
-rw-r--r-- | utils/mount/mount.c | 32 | ||||
-rw-r--r-- | utils/mount/nfs_mount.h | 3 | ||||
-rw-r--r-- | utils/mount/nfsmount.c | 3 |
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 */ |