From: Jens Axboe Date: Wed, 14 Mar 2007 08:15:42 +0000 (+0100) Subject: Fix for bs shrinkage X-Git-Tag: fio-1.14~6 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=2393acbabe0f290da2d8f02c6ac0c1edf6ddb08a Fix for bs shrinkage Signed-off-by: Jens Axboe --- diff --git a/io_u.c b/io_u.c index 8f0cdff7..c7886563 100644 --- a/io_u.c +++ b/io_u.c @@ -109,12 +109,12 @@ static int get_next_offset(struct thread_data *td, struct io_u *io_u) unsigned long long max_blocks = f->file_size / td->min_bs[ddir]; int loops = 5; - if (!max_blocks) - return 1; - do { r = os_random_long(&td->random_state); - b = ((max_blocks - 1) * r / (unsigned long long) (RAND_MAX+1.0)); + if (!max_blocks) + b = 0; + else + b = ((max_blocks - 1) * r / (unsigned long long) (RAND_MAX+1.0)); if (td->norandommap) break; rb = b + (f->file_offset / td->min_bs[ddir]); @@ -154,8 +154,14 @@ static unsigned int get_next_buflen(struct thread_data *td, struct io_u *io_u) } while (buflen + io_u->offset > f->real_file_size) { - if (buflen == td->min_bs[ddir]) + if (buflen == td->min_bs[ddir]) { + if (!td->odirect) { + assert(io_u->offset <= f->real_file_size); + buflen = f->real_file_size - io_u->offset; + return buflen; + } return 0; + } buflen = td->min_bs[ddir]; }