From: Oleg Nesterov <oleg@tv-sign.ru>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Paul Clements <Paul.Clements@steeleye.com>,
Pavel Machek <pavel@ucw.cz>, Roland McGrath <roland@redhat.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH] nbd.c:sock_xmit: cleanup signal related code
Date: Thu, 14 Jun 2007 21:22:43 +0400 [thread overview]
Message-ID: <20070614172243.GA2446@tv-sign.ru> (raw)
sock_xmit() re-implements sigprocmask() and dequeue_signal_lock().
Note: I can't understand this dequeue_signal(), it can dequeue SIGKILL
for the user-space task doing nbd_ioctl() ?
Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
--- sig/drivers/block/nbd.c~1_nbd 2007-05-21 13:57:50.000000000 +0400
+++ sig/drivers/block/nbd.c 2007-06-14 19:39:55.000000000 +0400
@@ -122,17 +122,12 @@ static int sock_xmit(struct socket *sock
int result;
struct msghdr msg;
struct kvec iov;
- unsigned long flags;
- sigset_t oldset;
+ sigset_t blocked, oldset;
/* Allow interception of SIGKILL only
* Don't allow other signals to interrupt the transmission */
- spin_lock_irqsave(¤t->sighand->siglock, flags);
- oldset = current->blocked;
- sigfillset(¤t->blocked);
- sigdelsetmask(¤t->blocked, sigmask(SIGKILL));
- recalc_sigpending();
- spin_unlock_irqrestore(¤t->sighand->siglock, flags);
+ siginitsetinv(&blocked, sigmask(SIGKILL));
+ sigprocmask(SIG_SETMASK, &blocked, &oldset);
do {
sock->sk->sk_allocation = GFP_NOIO;
@@ -151,11 +146,9 @@ static int sock_xmit(struct socket *sock
if (signal_pending(current)) {
siginfo_t info;
- spin_lock_irqsave(¤t->sighand->siglock, flags);
printk(KERN_WARNING "nbd (pid %d: %s) got signal %d\n",
- current->pid, current->comm,
- dequeue_signal(current, ¤t->blocked, &info));
- spin_unlock_irqrestore(¤t->sighand->siglock, flags);
+ current->pid, current->comm,
+ dequeue_signal_lock(current, ¤t->blocked, &info));
result = -EINTR;
break;
}
@@ -169,10 +162,7 @@ static int sock_xmit(struct socket *sock
buf += result;
} while (size > 0);
- spin_lock_irqsave(¤t->sighand->siglock, flags);
- current->blocked = oldset;
- recalc_sigpending();
- spin_unlock_irqrestore(¤t->sighand->siglock, flags);
+ sigprocmask(SIG_SETMASK, &oldset, NULL);
return result;
}
next reply other threads:[~2007-06-14 17:22 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-14 17:22 Oleg Nesterov [this message]
2007-06-14 19:36 ` [PATCH] nbd.c:sock_xmit: cleanup signal related code Paul Clements
2007-06-14 20:11 ` Oleg Nesterov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070614172243.GA2446@tv-sign.ru \
--to=oleg@tv-sign.ru \
--cc=Paul.Clements@steeleye.com \
--cc=akpm@linux-foundation.org \
--cc=benh@kernel.crashing.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pavel@ucw.cz \
--cc=roland@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox