freebsd/libshare: nfs: don't send SIGHUP to all processes
pidfile_open() sets *pidptr to -1 if the process currently holding the lock is between pidfile_open() and pidfile_write(), the subsequent kill(mountdpid) would potentially SIGHUP all non-system processes except init: just sleep for half a millisecond and try again in that case Reviewed-by: Don Brady <don.brady@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: John Kennedy <john.kennedy@delphix.com> Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz> Closes #12067
This commit is contained in:
parent
cf65c33c9c
commit
bdf6464c6c
@ -306,9 +306,10 @@ nfs_commit_shares(void)
|
||||
struct pidfh *pfh;
|
||||
pid_t mountdpid;
|
||||
|
||||
start:
|
||||
pfh = pidfile_open(_PATH_MOUNTDPID, 0600, &mountdpid);
|
||||
if (pfh != NULL) {
|
||||
/* Mountd is not running. */
|
||||
/* mountd(8) is not running. */
|
||||
pidfile_remove(pfh);
|
||||
return (SA_OK);
|
||||
}
|
||||
@ -316,6 +317,11 @@ nfs_commit_shares(void)
|
||||
/* Cannot open pidfile for some reason. */
|
||||
return (SA_SYSTEM_ERR);
|
||||
}
|
||||
if (mountdpid == -1) {
|
||||
/* mountd(8) exists, but didn't write the PID yet */
|
||||
usleep(500);
|
||||
goto start;
|
||||
}
|
||||
/* We have mountd(8) PID in mountdpid variable. */
|
||||
kill(mountdpid, SIGHUP);
|
||||
return (SA_OK);
|
||||
|
Loading…
Reference in New Issue
Block a user