diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-01-03 09:55:19 +0100 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-01-06 14:58:45 -0500 |
commit | 2bd615797ef32ec06ef0ee44198a7aecc21ffd8c (patch) | |
tree | 5ef07d09b9e3674dffce1a24dfb46e6d23410a72 | |
parent | fe650407a86823bcafbfbee96c7bc6a1b5cd1c76 (diff) | |
download | linux-3.10-2bd615797ef32ec06ef0ee44198a7aecc21ffd8c.tar.gz linux-3.10-2bd615797ef32ec06ef0ee44198a7aecc21ffd8c.tar.bz2 linux-3.10-2bd615797ef32ec06ef0ee44198a7aecc21ffd8c.zip |
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 12a857c29e2..71a30b416d1 100644 --- a/fs/lockd/svc.c +++ b/fs/lockd/svc.c @@ -178,6 +178,8 @@ lockd(struct svc_rqst *rqstp) } + flush_signals(current); + /* * Check whether there's a new lockd process before * shutting down the hosts and clearing the slot. @@ -192,8 +194,6 @@ lockd(struct svc_rqst *rqstp) "lockd: new process, skipping host shutdown\n"); wake_up(&lockd_exit); - flush_signals(current); - /* Exit the RPC thread */ svc_exit_thread(rqstp); diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index f025b7e7235..b23c0d328c9 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -386,11 +386,11 @@ static const struct rpc_call_ops rpc_default_ops = { * Export the signal mask handling for synchronous code that * sleeps on RPC calls */ -#define RPC_INTR_SIGNALS (sigmask(SIGINT) | sigmask(SIGQUIT) | sigmask(SIGKILL)) +#define RPC_INTR_SIGNALS (sigmask(SIGHUP) | sigmask(SIGINT) | sigmask(SIGQUIT) | sigmask(SIGTERM)) static void rpc_save_sigmask(sigset_t *oldset, int intr) { - unsigned long sigallow = 0; + unsigned long sigallow = sigmask(SIGKILL); sigset_t sigmask; /* Block all signals except those listed in sigallow */ |