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 */ |
