From: Michael Buesch Block reads to /dev/hwrng if O_NONBLOCK is not set. This restores the old behavior, to not break userland (rngd). Thanks to for pointing out the issue. Signed-off-by: Michael Buesch Signed-off-by: Andrew Morton --- drivers/char/hw_random/core.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff -puN drivers/char/hw_random/core.c~add-new-generic-hw-rng-core-hw_random-core-rewrite-chrdev-read-method-hw_random-core-block-read-if-o_nonblock drivers/char/hw_random/core.c --- devel/drivers/char/hw_random/core.c~add-new-generic-hw-rng-core-hw_random-core-rewrite-chrdev-read-method-hw_random-core-block-read-if-o_nonblock 2006-06-09 15:18:07.000000000 -0700 +++ devel-akpm/drivers/char/hw_random/core.c 2006-06-09 15:18:07.000000000 -0700 @@ -125,7 +125,7 @@ static ssize_t rng_dev_read(struct file mutex_unlock(&rng_mutex); err = -EAGAIN; - if (!bytes_read) + if (!bytes_read && (filp->f_flags & O_NONBLOCK)) goto out; err = -EFAULT; @@ -138,6 +138,9 @@ static ssize_t rng_dev_read(struct file data >>= 8; } + if (need_resched()) + schedule_timeout_interruptible(1); + err = -ERESTARTSYS; if (signal_pending(current)) goto out; } _