]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_io: Prevent devide by zero from {pread,pwrite}_random
authorDmitry Monakhov <dmonakhov@openvz.org>
Sun, 28 Feb 2016 23:46:42 +0000 (10:46 +1100)
committerDave Chinner <david@fromorbit.com>
Sun, 28 Feb 2016 23:46:42 +0000 (10:46 +1100)
Math is wrong if range requested is less or equals to block size

xfs_io -c 'pwrite -b 4k 8k 4k -R' \
       -c 'pread -b 4k  4k 4k -R' -f file

Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
io/pread.c
io/pwrite.c

index f16c86c1a76dcd4dd4d35dc1f536d98381ac3f35..b98355f5baaf0c09fa0ded765aed12a85a9f760c 100644 (file)
@@ -245,7 +245,11 @@ read_random(
 
        *total = 0;
        while (count > 0) {
-               off = ((offset + (random() % range)) / buffersize) * buffersize;
+               if (range)
+                       off = ((offset + (random() % range)) / buffersize) *
+                               buffersize;
+               else
+                       off = offset;
                bytes = do_pread(fd, off, buffersize, buffersize);
                if (bytes == 0)
                        break;
index 4fc8de63c12f0a14b518c5d6d92aa15a0e8f01e4..67631ce5894469f92a363911d82e12fbbf400ce3 100644 (file)
@@ -128,7 +128,11 @@ write_random(
 
        *total = 0;
        while (count > 0) {
-               off = ((offset + (random() % range)) / buffersize) * buffersize;
+               if (range)
+                       off = ((offset + (random() % range)) / buffersize) *
+                               buffersize;
+               else
+                       off = offset;
                bytes = do_pwrite(file->fd, off, buffersize, buffersize);
                if (bytes == 0)
                        break;