aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2006-01-03 03:55:19 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2006-01-06 14:58:45 -0500
commit2bd615797ef32ec06ef0ee44198a7aecc21ffd8c (patch)
tree5ef07d09b9e3674dffce1a24dfb46e6d23410a72
parentfe650407a86823bcafbfbee96c7bc6a1b5cd1c76 (diff)
SUNRPC: Ensure that SIGKILL will always terminate a synchronous RPC call.
...and make sure that the "intr" flag also enables SIGHUP and SIGTERM to interrupt RPC calls too (as per the Solaris implementation). Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r--fs/lockd/svc.c4
-rw-r--r--net/sunrpc/clnt.c4
2 files changed, 4 insertions, 4 deletions
diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c
index 12a857c29e25..71a30b416d1a 100644
--- a/fs/lockd/svc.c
+++ b/fs/lockd/svc.c
@@ -178,6 +178,8 @@ lockd(struct svc_rqst *rqstp)
178 178
179 } 179 }
180 180
181 flush_signals(current);
182
181 /* 183 /*
182 * Check whether there's a new lockd process before 184 * Check whether there's a new lockd process before
183 * shutting down the hosts and clearing the slot. 185 * shutting down the hosts and clearing the slot.
@@ -192,8 +194,6 @@ lockd(struct svc_rqst *rqstp)
192 "lockd: new process, skipping host shutdown\n"); 194 "lockd: new process, skipping host shutdown\n");
193 wake_up(&lockd_exit); 195 wake_up(&lockd_exit);
194 196
195 flush_signals(current);
196
197 /* Exit the RPC thread */ 197 /* Exit the RPC thread */
198 svc_exit_thread(rqstp); 198 svc_exit_thread(rqstp);
199 199
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index f025b7e72353..b23c0d328c9c 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -386,11 +386,11 @@ static const struct rpc_call_ops rpc_default_ops = {
386 * Export the signal mask handling for synchronous code that 386 * Export the signal mask handling for synchronous code that
387 * sleeps on RPC calls 387 * sleeps on RPC calls
388 */ 388 */
389#define RPC_INTR_SIGNALS (sigmask(SIGINT) | sigmask(SIGQUIT) | sigmask(SIGKILL)) 389#define RPC_INTR_SIGNALS (sigmask(SIGHUP) | sigmask(SIGINT) | sigmask(SIGQUIT) | sigmask(SIGTERM))
390 390
391static void rpc_save_sigmask(sigset_t *oldset, int intr) 391static void rpc_save_sigmask(sigset_t *oldset, int intr)
392{ 392{
393 unsigned long sigallow = 0; 393 unsigned long sigallow = sigmask(SIGKILL);
394 sigset_t sigmask; 394 sigset_t sigmask;
395 395
396 /* Block all signals except those listed in sigallow */ 396 /* Block all signals except those listed in sigallow */