From: Andrew Morton <akpm@linux-foundation.org>
To: Manfred Spraul <manfred@colorfullife.com>
Cc: linux-kernel@vger.kernel.org, Oleg Nesterov <oleg@tv-sign.ru>,
Roland McGrath <roland@redhat.com>
Subject: Re: [PATCH] Use ERESTARTNOHAND if poll() is interrupted by a signal
Date: Mon, 30 Jul 2007 16:35:38 -0700 [thread overview]
Message-ID: <20070730163538.67b256da.akpm@linux-foundation.org> (raw)
In-Reply-To: <200707291705.l6TH554a003344@colorfullife.mysite.adiungo.com>
On Sun, 29 Jul 2007 19:05:05 +0200
Manfred Spraul <manfred@colorfullife.com> wrote:
> Hi Andrew,
>
> poll() returns -EINTR if a signal is pending.
> EINTR is a bad choice: it means that poll returns to user space if the
> task is stopped by SIGSTOP/SIGCONT or by the freezer.
> select() and ppoll() both use ERESTARTNOHAND, this avoids a return to
> user space for signals that are handled by the kernel.
>
> The patch switches poll() to ERESTARTNOHAND.
> Tested with FC6. Patch against 2.6.23-rc1-mm1.
hm. Is this a fix against
ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.23-rc1/2.6.23-rc1-mm1/broken-out/do_poll-return-eintr-when-signalled.patch
only, or does mainline also need fixing?
I guess the consequences of the thing-which-this-fixes aren't huge, s I ca
queue this up for 2.6.24, after Oleg's
do_poll-return-eintr-when-signalled.patch?
> Signed-off-by: Manfred Spraul <manfred@colorfullife.com>
>
> --- 2.6/fs/select.c 2007-07-28 20:31:51.000000000 +0200
> +++ build-2.6/fs/select.c 2007-07-28 21:21:52.000000000 +0200
> @@ -621,7 +621,7 @@ static int do_poll(unsigned int nfds, s
> if (!count) {
> count = wait->error;
> if (signal_pending(current))
> - count = -EINTR;
> + count = -ERESTARTNOHAND;
> }
> if (count || !*timeout)
> break;
> @@ -774,7 +774,7 @@ asmlinkage long sys_ppoll(struct pollfd
> ret = do_sys_poll(ufds, nfds, &timeout);
>
> /* We can restart this syscall, usually */
> - if (ret == -EINTR) {
> + if (ret == -ERESTARTNOHAND) {
> /*
> * Don't restore the signal mask yet. Let do_signal() deliver
> * the signal on the way back to userspace, before the signal
> @@ -785,7 +785,6 @@ asmlinkage long sys_ppoll(struct pollfd
> sizeof(sigsaved));
> set_thread_flag(TIF_RESTORE_SIGMASK);
> }
> - ret = -ERESTARTNOHAND;
> } else if (sigmask)
> sigprocmask(SIG_SETMASK, &sigsaved, NULL);
>
I spied this comment in there:
/*
* We can actually return ERESTARTSYS instead of EINTR, but I'd
* like to be certain this leads to no problems. So I return
* EINTR just for safety.
*
* Update: ERESTARTSYS breaks at least the xview clock binary, so
* I'm trying ERESTARTNOHAND which restart only when you want to.
*/
it is very old and perhaps is no longer relevant?
next prev parent reply other threads:[~2007-07-30 23:36 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-29 17:05 [PATCH] Use ERESTARTNOHAND if poll() is interrupted by a signal Manfred Spraul
2007-07-30 23:35 ` Andrew Morton [this message]
2007-07-30 23:59 ` Chris Wright
2007-07-31 0:11 ` Oleg Nesterov
2007-07-31 0:18 ` Oleg Nesterov
2007-07-31 17:36 ` Chris Wright
2007-07-31 20:31 ` Manfred Spraul
2007-07-31 21:08 ` Oleg Nesterov
2007-08-04 6:39 ` [PATCH] Use ERESTART_RESTARTBLOCK if poll() is interrupted by a signal (was: Re: [PATCH] Use ERESTARTNOHAND if poll() is interrupted by a signal) Chris Wright
2007-08-04 11:07 ` Oleg Nesterov
2007-08-15 22:27 ` [PATCH take2] Use ERESTART_RESTARTBLOCK if poll() is interrupted by a signal Chris Wright
2007-08-16 15:51 ` Oleg Nesterov
2007-08-28 9:11 ` [PATCH] Use ERESTARTNOHAND " Roland McGrath
2007-07-30 23:56 ` Chris Wright
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=20070730163538.67b256da.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=manfred@colorfullife.com \
--cc=oleg@tv-sign.ru \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.