diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-09 20:40:25 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-09 20:40:25 -0700 |
commit | 2b83868723d090078ac0e2120e06a1cc94dbaef0 (patch) | |
tree | 3cc99c519f8338a92d46ad290d1415f8bb01c9b2 /drivers/char/mem.c | |
parent | 07a2039b8eb0af4ff464efd3dfd95de5c02648c6 (diff) | |
download | op-kernel-dev-2b83868723d090078ac0e2120e06a1cc94dbaef0.zip op-kernel-dev-2b83868723d090078ac0e2120e06a1cc94dbaef0.tar.gz |
Make /dev/zero reads interruptible by signals
This helps with bad latencies for large reads from /dev/zero, but might
conceivably break some application that "knows" that a read of /dev/zero
cannot return early. So do this early in the merge window to give us
maximal test coverage, even if the patch is totally trivial.
Obviously, no well-behaved application should ever depend on the read
being uninterruptible, but hey, bugs happen.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/char/mem.c')
-rw-r--r-- | drivers/char/mem.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/char/mem.c b/drivers/char/mem.c index 65e12bc..f96d0be 100644 --- a/drivers/char/mem.c +++ b/drivers/char/mem.c @@ -694,9 +694,8 @@ static ssize_t read_zero(struct file * file, char __user * buf, written += chunk - unwritten; if (unwritten) break; - /* Consider changing this to just 'signal_pending()' with lots of testing */ - if (fatal_signal_pending(current)) - return written ? written : -EINTR; + if (signal_pending(current)) + return written ? written : -ERESTARTSYS; buf += chunk; count -= chunk; cond_resched(); |