aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/mem.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-06-09 20:40:25 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2009-06-09 20:40:25 -0700
commit2b83868723d090078ac0e2120e06a1cc94dbaef0 (patch)
tree3cc99c519f8338a92d46ad290d1415f8bb01c9b2 /drivers/char/mem.c
parent07a2039b8eb0af4ff464efd3dfd95de5c02648c6 (diff)
downloadkernel_samsung_smdk4412-2b83868723d090078ac0e2120e06a1cc94dbaef0.zip
kernel_samsung_smdk4412-2b83868723d090078ac0e2120e06a1cc94dbaef0.tar.gz
kernel_samsung_smdk4412-2b83868723d090078ac0e2120e06a1cc94dbaef0.tar.bz2
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.c5
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();