diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-01-03 03:55:19 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-01-06 14:58:45 -0500 |
commit | 2bd615797ef32ec06ef0ee44198a7aecc21ffd8c (patch) | |
tree | 5ef07d09b9e3674dffce1a24dfb46e6d23410a72 | |
parent | fe650407a86823bcafbfbee96c7bc6a1b5cd1c76 (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.c | 4 | ||||
-rw-r--r-- | net/sunrpc/clnt.c | 4 |
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 | ||
391 | static void rpc_save_sigmask(sigset_t *oldset, int intr) | 391 | static 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 */ |