projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Pass offset and buffer length explicitly to mark_random_map()
[fio.git]
/
io_u.c
diff --git
a/io_u.c
b/io_u.c
index e050d9f7c775e7f4fabe10b80f9add5d87f8e510..eed7d9d91c8d12d829321ba8ec01b69e2576a381 100644
(file)
--- a/
io_u.c
+++ b/
io_u.c
@@
-31,21
+31,24
@@
static bool random_map_free(struct fio_file *f, const uint64_t block)
/*
* Mark a given offset as used in the map.
*/
/*
* Mark a given offset as used in the map.
*/
-static void mark_random_map(struct thread_data *td, struct io_u *io_u)
+static uint64_t mark_random_map(struct thread_data *td, struct io_u *io_u,
+ uint64_t offset, uint64_t buflen)
{
unsigned long long min_bs = td->o.min_bs[io_u->ddir];
struct fio_file *f = io_u->file;
unsigned long long nr_blocks;
uint64_t block;
{
unsigned long long min_bs = td->o.min_bs[io_u->ddir];
struct fio_file *f = io_u->file;
unsigned long long nr_blocks;
uint64_t block;
- block = (
io_u->
offset - f->file_offset) / (uint64_t) min_bs;
- nr_blocks = (
io_u->
buflen + min_bs - 1) / min_bs;
+ block = (offset - f->file_offset) / (uint64_t) min_bs;
+ nr_blocks = (buflen + min_bs - 1) / min_bs;
if (!(io_u->flags & IO_U_F_BUSY_OK))
nr_blocks = axmap_set_nr(f->io_axmap, block, nr_blocks);
if (!(io_u->flags & IO_U_F_BUSY_OK))
nr_blocks = axmap_set_nr(f->io_axmap, block, nr_blocks);
- if ((nr_blocks * min_bs) < io_u->buflen)
- io_u->buflen = nr_blocks * min_bs;
+ if ((nr_blocks * min_bs) < buflen)
+ buflen = nr_blocks * min_bs;
+
+ return buflen;
}
static uint64_t last_block(struct thread_data *td, struct fio_file *f,
}
static uint64_t last_block(struct thread_data *td, struct fio_file *f,
@@
-761,6
+764,11
@@
void put_file_log(struct thread_data *td, struct fio_file *f)
void put_io_u(struct thread_data *td, struct io_u *io_u)
{
void put_io_u(struct thread_data *td, struct io_u *io_u)
{
+ if (io_u->post_submit) {
+ io_u->post_submit(io_u, io_u->error == 0);
+ io_u->post_submit = NULL;
+ }
+
if (td->parent)
td = td->parent;
if (td->parent)
td = td->parent;
@@
-903,7
+911,8
@@
static int fill_io_u(struct thread_data *td, struct io_u *io_u)
* mark entry before potentially trimming io_u
*/
if (td_random(td) && file_randommap(td, io_u->file))
* mark entry before potentially trimming io_u
*/
if (td_random(td) && file_randommap(td, io_u->file))
- mark_random_map(td, io_u);
+ io_u->buflen = mark_random_map(td, io_u, io_u->offset,
+ io_u->buflen);
out:
dprint_io_u(io_u, "fill");
out:
dprint_io_u(io_u, "fill");
@@
-1304,6
+1313,11
@@
static long set_io_u_file(struct thread_data *td, struct io_u *io_u)
if (!fill_io_u(td, io_u))
break;
if (!fill_io_u(td, io_u))
break;
+ if (io_u->post_submit) {
+ io_u->post_submit(io_u, false);
+ io_u->post_submit = NULL;
+ }
+
put_file_log(td, f);
td_io_close_file(td, f);
io_u->file = NULL;
put_file_log(td, f);
td_io_close_file(td, f);
io_u->file = NULL;