]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_io: fix random pread/pwrite to honor offset
authorEric Sandeen <sandeen@sandeen.net>
Mon, 14 Apr 2014 06:13:54 +0000 (16:13 +1000)
committerDave Chinner <david@fromorbit.com>
Mon, 14 Apr 2014 06:13:54 +0000 (16:13 +1000)
xfs_io's pread & pwrite claim to support a random IO mode
where it will do random IOs between offset & offset+len.

However, offset was ignored, and we did the IOs between 0
and len instead.

Clang caught this by pointing out that the calculated/normalized
"offset" variable was never read.

(NB: If the range is larger than RAND_MAX, these functions don't
work, but that's always been true, so I'll leave it for another
day...)

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
io/pread.c
io/pwrite.c

index a42baedddb5ffb0b0edef47f579eca67b6380e41..cff32757544b069e2bae648abe4de6cadd547bab 100644 (file)
@@ -246,7 +246,7 @@ read_random(
 
        *total = 0;
        while (count > 0) {
-               off = ((random() % range) / buffersize) * buffersize;
+               off = ((offset + (random() % range)) / buffersize) * buffersize;
                bytes = do_pread(fd, off, buffersize, buffersize);
                if (bytes == 0)
                        break;
index a2f0a81e34df2d32a07fb8b7a0d63291cce209d3..0674c01b2e01c1f9a5243a6568282363585dc9fb 100644 (file)
@@ -129,7 +129,7 @@ write_random(
 
        *total = 0;
        while (count > 0) {
-               off = ((random() % range) / buffersize) * buffersize;
+               off = ((offset + (random() % range)) / buffersize) * buffersize;
                bytes = do_pwrite(file->fd, off, buffersize, buffersize);
                if (bytes == 0)
                        break;