projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Extend --readonly
[fio.git]
/
io_u.c
diff --git
a/io_u.c
b/io_u.c
index 136dc04e7e22d881e1e07f32265ceebc9fbe4122..4750ac600a4272142bc85ccf9333382fcb1a4d28 100644
(file)
--- a/
io_u.c
+++ b/
io_u.c
@@
-55,7
+55,7
@@
static void mark_random_map(struct thread_data *td, struct io_u *io_u)
* If we have a mixed random workload, we may
* encounter blocks we already did IO to.
*/
* If we have a mixed random workload, we may
* encounter blocks we already did IO to.
*/
- if (!td->o.ddir_nr && !random_map_free(td, f, block))
+ if (!td->o.ddir_nr
== 1
&& !random_map_free(td, f, block))
break;
idx = RAND_MAP_IDX(td, f, block);
break;
idx = RAND_MAP_IDX(td, f, block);
@@
-162,10
+162,11
@@
static int get_next_offset(struct thread_data *td, struct io_u *io_u)
if (get_next_rand_offset(td, f, ddir, &b))
return 1;
} else {
if (get_next_rand_offset(td, f, ddir, &b))
return 1;
} else {
- if (f->last_pos >= f->real_file_size)
- return 1;
-
- b = f->last_pos / td->o.min_bs[ddir];
+ if (f->last_pos >= f->real_file_size) {
+ if (!td_random(td) || get_next_rand_offset(td, f, ddir, &b))
+ return 1;
+ } else
+ b = (f->last_pos - f->file_offset) / td->o.min_bs[ddir];
}
io_u->offset = (b * td->o.min_bs[ddir]) + f->file_offset;
}
io_u->offset = (b * td->o.min_bs[ddir]) + f->file_offset;
@@
-190,6
+191,9
@@
static unsigned int get_next_buflen(struct thread_data *td, struct io_u *io_u)
buflen = (buflen + td->o.min_bs[ddir] - 1) & ~(td->o.min_bs[ddir] - 1);
}
buflen = (buflen + td->o.min_bs[ddir] - 1) & ~(td->o.min_bs[ddir] - 1);
}
+ if (io_u->offset + buflen > io_u->file->real_file_size)
+ buflen = td->o.min_bs[ddir];
+
return buflen;
}
return buflen;
}
@@
-341,6
+345,9
@@
static int fill_io_u(struct thread_data *td, struct io_u *io_u)
if (!io_u->buflen)
return 1;
if (!io_u->buflen)
return 1;
+ if (io_u->offset + io_u->buflen > io_u->file->real_file_size)
+ return 1;
+
/*
* mark entry before potentially trimming io_u
*/
/*
* mark entry before potentially trimming io_u
*/