diff options
author | Jeff Layton <jlayton@primarydata.com> | 2014-09-19 10:53:47 -0400 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2014-09-19 11:16:16 -0400 |
commit | 54f9bfeec7e68ef4b9be4fc70f17c9b9350637b4 (patch) | |
tree | a7fd1c479f1bc9afda50040c218d428a29f31c30 | |
parent | 64229ea3c8506a9b0599eafffa3d6bb488c248ec (diff) | |
download | nfs-utils-54f9bfeec7e68ef4b9be4fc70f17c9b9350637b4.tar.gz nfs-utils-54f9bfeec7e68ef4b9be4fc70f17c9b9350637b4.tar.xz nfs-utils-54f9bfeec7e68ef4b9be4fc70f17c9b9350637b4.zip |
sm-notify: inform the kernel if there were no hosts to notify
In the event that there no hosts to be notified after a reboot, there's
no real reason to force lockd to wait the entire grace period before
handing out locks. We're not expecting any reclaim requests to come in
that situation.
Have sm-notify do a write to /proc/fs/lockd/nlm_end_grace if that file
is present. That informs the kernel that it's OK to go ahead and lift
lockd's grace period early.
Signed-off-by: Jeff Layton <jlayton@primarydata.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r-- | utils/statd/sm-notify.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/utils/statd/sm-notify.c b/utils/statd/sm-notify.c index 5994b2f..8afddd9 100644 --- a/utils/statd/sm-notify.c +++ b/utils/statd/sm-notify.c @@ -42,6 +42,8 @@ #define NSM_TIMEOUT 2 #define NSM_MAX_TIMEOUT 120 /* don't make this too big */ +#define NLM_END_GRACE_FILE "/proc/fs/lockd/nlm_end_grace" + struct nsm_host { struct nsm_host * next; char * name; @@ -450,6 +452,28 @@ retry: return sock; } +/* Inform the kernel that it's OK to lift lockd's grace period */ +static void +nsm_lift_grace_period(void) +{ + int fd; + + fd = open(NLM_END_GRACE_FILE, O_WRONLY); + if (fd < 0) { + /* Don't warn if file isn't present */ + if (errno != ENOENT) + xlog(L_WARNING, "Unable to open %s: %m", + NLM_END_GRACE_FILE); + return; + } + + if (write(fd, "Y", 1) < 0) + xlog(L_WARNING, "Unable to write to %s: %m", NLM_END_GRACE_FILE); + + close(fd); + return; +} + int main(int argc, char **argv) { @@ -534,6 +558,7 @@ usage: fprintf(stderr, (void)nsm_retire_monitored_hosts(); if (nsm_load_notify_list(smn_get_host) == 0) { xlog(D_GENERAL, "No hosts to notify; exiting"); + nsm_lift_grace_period(); return 0; } |