Linux NFS development
 help / color / mirror / Atom feed
* [PATCH] gssd:  unblock DNOTIFY_SIGNAL in case it was blocked.
@ 2008-11-10 22:29 Neil Brown
       [not found] ` <18712.46537.9006.490726-wvvUuzkyo1EYVZTmpyfIwg@public.gmane.org>
  0 siblings, 1 reply; 7+ messages in thread
From: Neil Brown @ 2008-11-10 22:29 UTC (permalink / raw)
  To: kwc, linux-nfs


I have a situation where rpc.gssd appears to not be working.
Mount attempts which need to communicate with it block.

I've narrowed down the problem to that fact that all realtime signals
have been blocked.  This means that DNOTIFY_SIGNAL (which is a
realtime signal) is never delivered, so gssd never rescans the
rpc_pipe/nfs directory.

I haven't figured out why the signals are blocked yet, but having
rpc.gssd fail mysteriously in that situation isn't pleasant.

So I wonder what people think of the following patch.  It simply
unblocks the signal.  Alternately we can check if it is blocked and
warn - I'm not really sure of the significance of blocking all these
signals.  Maybe it's wrong to just unblock them.


As an aside, maybe we could change gssd_run to use "ppoll" rather than
"poll".  Then it would not have to wake up every 500msec to see if it
missed a signal. We would probably have to check kernel version was at
least 2.6.16....

NeilBrown



diff --git a/utils/gssd/gssd_main_loop.c b/utils/gssd/gssd_main_loop.c
index 84f04e9..b9f3a06 100644
--- a/utils/gssd/gssd_main_loop.c
+++ b/utils/gssd/gssd_main_loop.c
@@ -99,6 +99,7 @@ gssd_run()
 	int			ret;
 	struct sigaction	dn_act;
 	int			fd;
+	sigset_t		set;
 
 	/* Taken from linux/Documentation/dnotify.txt: */
 	dn_act.sa_sigaction = dir_notify_handler;
@@ -106,6 +107,11 @@ gssd_run()
 	dn_act.sa_flags = SA_SIGINFO;
 	sigaction(DNOTIFY_SIGNAL, &dn_act, NULL);
 
+	/* just in case the signal is blocked... */
+	sigemptyset(&set);
+	sigaddset(&set, DNOTIFY_SIGNAL);
+	sigprocmask(SIG_UNBLOCK, &set, NULL);
+
 	if ((fd = open(pipefs_nfsdir, O_RDONLY)) == -1) {
 		printerr(0, "ERROR: failed to open %s: %s\n",
 			 pipefs_nfsdir, strerror(errno));

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2008-12-01 19:31 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-10 22:29 [PATCH] gssd: unblock DNOTIFY_SIGNAL in case it was blocked Neil Brown
     [not found] ` <18712.46537.9006.490726-wvvUuzkyo1EYVZTmpyfIwg@public.gmane.org>
2008-11-11  4:13   ` Kevin Coffman
2008-11-11 19:09   ` J. Bruce Fields
2008-11-11 22:20     ` NeilBrown
     [not found]       ` <ced7f54f33cb02088b6d9c10603c047e.squirrel-eq65iwfR9nKIECXXMXunQA@public.gmane.org>
2008-11-13  4:37         ` J. Bruce Fields
2008-11-25 15:00           ` Steve Dickson
2008-12-01 19:29   ` Steve Dickson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox