Commit be0ef957 authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Linus Torvalds

nbd.c: sock_xmit: cleanup signal related code

sock_xmit() re-implements sigprocmask() and dequeue_signal_lock().
Signed-off-by: default avatarOleg Nesterov <oleg@tv-sign.ru>
Acked-by: default avatarPaul Clements <paul.clements@steeleye.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 3e1ac130
...@@ -122,17 +122,12 @@ static int sock_xmit(struct socket *sock, int send, void *buf, int size, ...@@ -122,17 +122,12 @@ static int sock_xmit(struct socket *sock, int send, void *buf, int size,
int result; int result;
struct msghdr msg; struct msghdr msg;
struct kvec iov; struct kvec iov;
unsigned long flags; sigset_t blocked, oldset;
sigset_t oldset;
/* Allow interception of SIGKILL only /* Allow interception of SIGKILL only
* Don't allow other signals to interrupt the transmission */ * Don't allow other signals to interrupt the transmission */
spin_lock_irqsave(&current->sighand->siglock, flags); siginitsetinv(&blocked, sigmask(SIGKILL));
oldset = current->blocked; sigprocmask(SIG_SETMASK, &blocked, &oldset);
sigfillset(&current->blocked);
sigdelsetmask(&current->blocked, sigmask(SIGKILL));
recalc_sigpending();
spin_unlock_irqrestore(&current->sighand->siglock, flags);
do { do {
sock->sk->sk_allocation = GFP_NOIO; sock->sk->sk_allocation = GFP_NOIO;
...@@ -151,11 +146,9 @@ static int sock_xmit(struct socket *sock, int send, void *buf, int size, ...@@ -151,11 +146,9 @@ static int sock_xmit(struct socket *sock, int send, void *buf, int size,
if (signal_pending(current)) { if (signal_pending(current)) {
siginfo_t info; siginfo_t info;
spin_lock_irqsave(&current->sighand->siglock, flags);
printk(KERN_WARNING "nbd (pid %d: %s) got signal %d\n", printk(KERN_WARNING "nbd (pid %d: %s) got signal %d\n",
current->pid, current->comm, current->pid, current->comm,
dequeue_signal(current, &current->blocked, &info)); dequeue_signal_lock(current, &current->blocked, &info));
spin_unlock_irqrestore(&current->sighand->siglock, flags);
result = -EINTR; result = -EINTR;
break; break;
} }
...@@ -169,10 +162,7 @@ static int sock_xmit(struct socket *sock, int send, void *buf, int size, ...@@ -169,10 +162,7 @@ static int sock_xmit(struct socket *sock, int send, void *buf, int size,
buf += result; buf += result;
} while (size > 0); } while (size > 0);
spin_lock_irqsave(&current->sighand->siglock, flags); sigprocmask(SIG_SETMASK, &oldset, NULL);
current->blocked = oldset;
recalc_sigpending();
spin_unlock_irqrestore(&current->sighand->siglock, flags);
return result; return result;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment