On Mon, 22 May 2006 13:25:10 +0200, Michael Buesch said: > On Monday 22 May 2006 13:15, you wrote: > > It looks to me line the old code stayed in a while() loop in rng_dev_read > > until it had fulfilled the read request (including possibly multiple > > calls to need_resched() and friends). The new code will bail on an -EAGAIN > > as soon as the *first* poll fails, rather than waiting until something > > is available - even if it is NOT flagged O_NONBLOCK. > > Yeah. That is how it works. I am wondering why userspace doesn't > simply retry, if it receives an EAGAIN. > Should we return ERESTARTSYS or something like that instead? That's not the way it worked in previous kernels, and it's not the way that the current rng-utils RPM in Fedora expects it to work. Here's a patch that makes it work the way it used to. Adding the test for O_NONBLOCK is the biggie - the old code did a resched test at that point in the loop, so I added it here too. --- linux-2.6.17-rc4-mm3/drivers/char/hw_random/core.c.rnd_fix 2006-05-22 07:23:34.000000000 -0400 +++ linux-2.6.17-rc4-mm3/drivers/char/hw_random/core.c 2006-05-22 07:22:29.000000000 -0400 @@ -125,7 +125,7 @@ static ssize_t rng_dev_read(struct file mutex_unlock(&rng_mutex); err = -EAGAIN; - if (!bytes_read) + if (filp->f_flags & O_NONBLOCK && !bytes_read) 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); + if (signal_pending(current)) goto out; }
Attachment:
pgpqgwkfijxTu.pgp
Description: PGP signature
- Follow-Ups:
- Re: 2.6.17-rc4-mm3
- From: Michael Buesch <[email protected]>
- Re: 2.6.17-rc4-mm3
- References:
- 2.6.17-rc4-mm3
- From: Andrew Morton <[email protected]>
- Re: 2.6.17-rc4-mm3
- From: [email protected]
- Re: 2.6.17-rc4-mm3
- From: Michael Buesch <[email protected]>
- 2.6.17-rc4-mm3
- Prev by Date: strange latency problem with local_irqs_disabled in kernel mode.
- Next by Date: Re: 2.6.17-rc4-mm3
- Previous by thread: Re: 2.6.17-rc4-mm3
- Next by thread: Re: 2.6.17-rc4-mm3
- Index(es):