X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fstatd%2Fsm-notify.c;h=bb6c2efa3f4e949191f4831757f7cf5e649eafa6;hp=a94876d1b160190c819d6b7ae82d9caf800a5805;hb=dda3455d8b96a7b078bc00c113e1af15ed421d5b;hpb=ca5f2d1e16a6451c1df203bccfd8944ee84c728f diff --git a/utils/statd/sm-notify.c b/utils/statd/sm-notify.c index a94876d..bb6c2ef 100644 --- a/utils/statd/sm-notify.c +++ b/utils/statd/sm-notify.c @@ -88,6 +88,7 @@ static struct addrinfo *host_lookup(int, const char *); void nsm_log(int fac, const char *fmt, ...); static int record_pid(); static void drop_privs(void); +static void set_kernel_nsm_state(int state); static struct nsm_host * hosts = NULL; @@ -166,6 +167,10 @@ usage: fprintf(stderr, backup_hosts(_SM_DIR_PATH, _SM_BAK_PATH); get_hosts(_SM_BAK_PATH); + /* Get and update the NSM state. This will call sync() */ + nsm_state = nsm_get_state(opt_update_state); + set_kernel_nsm_state(nsm_state); + if (!opt_debug) { if (!opt_quiet) printf("Backgrounding to notify hosts...\n"); @@ -184,9 +189,6 @@ usage: fprintf(stderr, close(2); } - /* Get and update the NSM state. This will call sync() */ - nsm_state = nsm_get_state(opt_update_state); - notify(); if (hosts) { @@ -758,3 +760,16 @@ static void drop_privs(void) exit(1); } } + +static void set_kernel_nsm_state(int state) +{ + int fd; + + fd = open("/proc/sys/fs/nfs/nsm_local_state",O_WRONLY); + if (fd >= 0) { + char buf[20]; + snprintf(buf, sizeof(buf), "%d", state); + write(fd, buf, strlen(buf)); + close(fd); + } +}