ret = read(fd, buf, total);
if (ret < 0) {
- td_verror(td, errno, "read blktrace file");
- return -1;
+ int read_err = errno;
+
+ assert(read_err > 0);
+ td_verror(td, read_err, "read blktrace file");
+ return -read_err;
}
if (ret > 0)
}
ret = discard_pdu(td, fifo, fd, &t);
if (ret < 0) {
- td_verror(td, ret, "blktrace lseek");
+ td_verror(td, -ret, "blktrace lseek");
goto err;
} else if (t.pdu_len != ret) {
log_err("fio: discarded %d of %d\n", ret, t.pdu_len);
!ios[DDIR_SYNC]) {
log_err("fio: found no ios in blktrace data\n");
return false;
- } else if (ios[DDIR_READ] && !ios[DDIR_WRITE]) {
- td->o.td_ddir = TD_DDIR_READ;
- td->o.max_bs[DDIR_READ] = rw_bs[DDIR_READ];
- } else if (!ios[DDIR_READ] && ios[DDIR_WRITE]) {
- td->o.td_ddir = TD_DDIR_WRITE;
- td->o.max_bs[DDIR_WRITE] = rw_bs[DDIR_WRITE];
- } else {
- td->o.td_ddir = TD_DDIR_RW;
+ }
+
+ td->o.td_ddir = 0;
+ if (ios[DDIR_READ]) {
+ td->o.td_ddir |= TD_DDIR_READ;
td->o.max_bs[DDIR_READ] = rw_bs[DDIR_READ];
+ }
+ if (ios[DDIR_WRITE]) {
+ td->o.td_ddir |= TD_DDIR_WRITE;
td->o.max_bs[DDIR_WRITE] = rw_bs[DDIR_WRITE];
+ }
+ if (ios[DDIR_TRIM]) {
+ td->o.td_ddir |= TD_DDIR_TRIM;
td->o.max_bs[DDIR_TRIM] = rw_bs[DDIR_TRIM];
}
t_get_ddir(t) == DDIR_INVAL) {
ret = discard_pdu(td, bc->fifo, bc->fd, t);
if (ret < 0) {
- td_verror(td, ret, "blktrace lseek");
+ td_verror(td, -ret, "blktrace lseek");
return ret;
} else if (t->pdu_len != ret) {
log_err("fio: discarded %d of %d\n", ret,
/* setup output file */
merge_fp = fopen(td->o.merge_blktrace_file, "w");
merge_buf = malloc(128 * 1024);
+ if (!merge_buf)
+ goto err_out_file;
ret = setvbuf(merge_fp, merge_buf, _IOFBF, 128 * 1024);
if (ret)
- goto err_out_file;
+ goto err_merge_buf;
/* setup input files */
str = ptr = strdup(td->o.read_iolog_file);
if (bcs[i].fd < 0) {
log_err("fio: could not open file: %s\n", name);
ret = bcs[i].fd;
+ free(str);
goto err_file;
}
bcs[i].fifo = fifo_alloc(TRACE_FIFO_SIZE);
if (!is_blktrace(name, &bcs[i].swap)) {
log_err("fio: file is not a blktrace: %s\n", name);
+ free(str);
goto err_file;
}
ret = read_trace(td, &bcs[i]);
if (ret < 0) {
+ free(str);
goto err_file;
} else if (!ret) {
merge_finish_file(bcs, i, &nr_logs);
/* skip over the pdu */
ret = discard_pdu(td, bc->fifo, bc->fd, &bc->t);
if (ret < 0) {
- td_verror(td, ret, "blktrace lseek");
+ td_verror(td, -ret, "blktrace lseek");
goto err_file;
} else if (bc->t.pdu_len != ret) {
log_err("fio: discarded %d of %d\n", ret,
fifo_free(bcs[i].fifo);
close(bcs[i].fd);
}
+err_merge_buf:
+ free(merge_buf);
err_out_file:
fflush(merge_fp);
fclose(merge_fp);
- free(merge_buf);
err_param:
free(bcs);