projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix issue with openfiles= and file sizing
[fio.git]
/
iolog.c
diff --git
a/iolog.c
b/iolog.c
index 0e492363465e9a94ad88433008fbcfdf59485e2f..5fd9416c036ec2454030b4ddf6772eab487efa30 100644
(file)
--- a/
iolog.c
+++ b/
iolog.c
@@
-188,6
+188,10
@@
void log_io_piece(struct thread_data *td, struct io_u *io_u)
ipo->file = io_u->file;
ipo->offset = io_u->offset;
ipo->len = io_u->buflen;
ipo->file = io_u->file;
ipo->offset = io_u->offset;
ipo->len = io_u->buflen;
+ ipo->numberio = io_u->numberio;
+ ipo->flags = IP_F_IN_FLIGHT;
+
+ io_u->ipo = ipo;
if (io_u_should_trim(td, io_u)) {
flist_add_tail(&ipo->trim_list, &td->trim_list);
if (io_u_should_trim(td, io_u)) {
flist_add_tail(&ipo->trim_list, &td->trim_list);
@@
-208,7
+212,7
@@
void log_io_piece(struct thread_data *td, struct io_u *io_u)
* drop the old one, which we rely on the rb insert/lookup for
* handling.
*/
* drop the old one, which we rely on the rb insert/lookup for
* handling.
*/
- if ((!td_random(td) || !td->o.overwrite) &&
+ if ((
(!td->o.verifysort) ||
!td_random(td) || !td->o.overwrite) &&
(file_randommap(td, ipo->file) || td->o.verify == VERIFY_NONE)) {
INIT_FLIST_HEAD(&ipo->list);
flist_add_tail(&ipo->list, &td->io_hist_list);
(file_randommap(td, ipo->file) || td->o.verify == VERIFY_NONE)) {
INIT_FLIST_HEAD(&ipo->list);
flist_add_tail(&ipo->list, &td->io_hist_list);
@@
-238,7
+242,9
@@
restart:
else if (ipo->offset > __ipo->offset)
p = &(*p)->rb_right;
else {
else if (ipo->offset > __ipo->offset)
p = &(*p)->rb_right;
else {
- assert(ipo->len == __ipo->len);
+ dprint(FD_IO, "iolog: overlap %llu/%lu, %llu/%lu",
+ __ipo->offset, __ipo->len,
+ ipo->offset, ipo->len);
td->io_hist_len--;
rb_erase(parent, &td->io_hist_tree);
remove_trim_entry(td, __ipo);
td->io_hist_len--;
rb_erase(parent, &td->io_hist_tree);
remove_trim_entry(td, __ipo);
@@
-313,6
+319,7
@@
static int read_iolog2(struct thread_data *td, FILE *f)
act);
continue;
}
act);
continue;
}
+ fileno = get_fileno(td, fname);
} else if (r == 2) {
rw = DDIR_INVAL;
if (!strcmp(act, "add")) {
} else if (r == 2) {
rw = DDIR_INVAL;
if (!strcmp(act, "add")) {
@@
-477,17
+484,22
@@
int init_iolog(struct thread_data *td)
int ret = 0;
if (td->o.read_iolog_file) {
int ret = 0;
if (td->o.read_iolog_file) {
+ int need_swap;
+
/*
* Check if it's a blktrace file and load that if possible.
* Otherwise assume it's a normal log file and load that.
*/
/*
* Check if it's a blktrace file and load that if possible.
* Otherwise assume it's a normal log file and load that.
*/
- if (is_blktrace(td->o.read_iolog_file))
- ret = load_blktrace(td, td->o.read_iolog_file);
+ if (is_blktrace(td->o.read_iolog_file
, &need_swap
))
+ ret = load_blktrace(td, td->o.read_iolog_file
, need_swap
);
else
ret = init_iolog_read(td);
} else if (td->o.write_iolog_file)
ret = init_iolog_write(td);
else
ret = init_iolog_read(td);
} else if (td->o.write_iolog_file)
ret = init_iolog_write(td);
+ if (ret)
+ td_verror(td, EINVAL, "failed initializing iolog");
+
return ret;
}
return ret;
}
@@
-532,7
+544,7
@@
void finish_log_named(struct thread_data *td, struct io_log *log,
{
char file_name[256], *p;
{
char file_name[256], *p;
- snprintf(file_name,
200
, "%s_%s.log", prefix, postfix);
+ snprintf(file_name,
sizeof(file_name)
, "%s_%s.log", prefix, postfix);
p = basename(file_name);
if (td->client_type == FIO_CLIENT_TYPE_GUI) {
p = basename(file_name);
if (td->client_type == FIO_CLIENT_TYPE_GUI) {