Skip to content

Commit

Permalink
random: simplify loop in random_read
Browse files Browse the repository at this point in the history
The loop condition never changes until just before a break, so we
might as well write it as a constant.  Also since a996996
("random: drop weird m_time/a_time manipulation") we don't do anything
after the loop finishes, so the 'break's might as well return
directly.  Some other simplifications.

There should be no change in behavior introduced by this commit.

Signed-off-by: Greg Price <price@mit.edu>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
  • Loading branch information
Greg Price authored and Theodore Ts'o committed Mar 20, 2014
1 parent 18e9cea commit 12ff3a5
Showing 1 changed file with 18 additions and 39 deletions.
57 changes: 18 additions & 39 deletions drivers/char/random.c
Original file line number Diff line number Diff line change
Expand Up @@ -1285,53 +1285,32 @@ void rand_initialize_disk(struct gendisk *disk)
static ssize_t
random_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
{
ssize_t n, retval = 0, count = 0;
ssize_t n;

if (nbytes == 0)
return 0;

while (nbytes > 0) {
n = nbytes;
if (n > SEC_XFER_SIZE)
n = SEC_XFER_SIZE;

n = extract_entropy_user(&blocking_pool, buf, n);

if (n < 0) {
retval = n;
break;
}

nbytes = min_t(size_t, nbytes, SEC_XFER_SIZE);
while (1) {
n = extract_entropy_user(&blocking_pool, buf, nbytes);
if (n < 0)
return n;
trace_random_read(n*8, (nbytes-n)*8,
ENTROPY_BITS(&blocking_pool),
ENTROPY_BITS(&input_pool));

if (n == 0) {
if (file->f_flags & O_NONBLOCK) {
retval = -EAGAIN;
break;
}

wait_event_interruptible(random_read_wait,
ENTROPY_BITS(&input_pool) >=
random_read_wakeup_thresh);

if (signal_pending(current)) {
retval = -ERESTARTSYS;
break;
}

continue;
}

count += n;
buf += n;
nbytes -= n;
break; /* This break makes the device work */
/* like a named pipe */
if (n > 0)
return n;
/* Pool is (near) empty. Maybe wait and retry. */

if (file->f_flags & O_NONBLOCK)
return -EAGAIN;

wait_event_interruptible(random_read_wait,
ENTROPY_BITS(&input_pool) >=
random_read_wakeup_thresh);
if (signal_pending(current))
return -ERESTARTSYS;
}

return (count ? count : retval);
}

static ssize_t
Expand Down

0 comments on commit 12ff3a5

Please sign in to comment.