static int check_engine_ops(struct ioengine_ops *ops)
{
if (ops->version != FIO_IOOPS_VERSION) {
- log_err("bad ioops version %d (want %d)\n", ops->version, FIO_IOOPS_VERSION);
+ log_err("bad ioops version %d (want %d)\n", ops->version,
+ FIO_IOOPS_VERSION);
return 1;
}
*/
if (ops->flags & FIO_SYNCIO)
return 0;
-
+
if (!ops->event) {
log_err("%s: no event handler\n", ops->name);
return 1;
log_err("%s: no queue handler\n", ops->name);
return 1;
}
-
+
return 0;
}
dprint_io_u(io_u, "prep");
fio_ro_check(td, io_u);
+ lock_file(td, io_u->file, io_u->ddir);
+
if (td->io_ops->prep) {
int ret = td->io_ops->prep(td, io_u);
dprint(FD_IO, "->prep(%p)=%d\n", io_u, ret);
+ if (ret)
+ unlock_file(td, io_u->file);
return ret;
}
if (td->io_ops->flags & FIO_SYNCIO) {
fio_gettime(&io_u->issue_time, NULL);
- memcpy(&td->last_issue, &io_u->issue_time, sizeof(struct timeval));
+ memcpy(&td->last_issue, &io_u->issue_time,
+ sizeof(struct timeval));
/*
* for a sync engine, set the timeout upfront
*/
- if (mtime_since(&td->timeout_end, &io_u->issue_time) < IO_U_TIMEOUT)
+ if (mtime_since(&td->timeout_end, &io_u->issue_time)
+ < IO_U_TIMEOUT)
io_u_set_timeout(td);
}
ret = td->io_ops->queue(td, io_u);
+ unlock_file(td, io_u->file);
+
if (ret != FIO_Q_BUSY)
io_u_mark_depth(td, io_u);
if ((td->io_ops->flags & FIO_SYNCIO) == 0) {
fio_gettime(&io_u->issue_time, NULL);
- memcpy(&td->last_issue, &io_u->issue_time, sizeof(struct timeval));
+ memcpy(&td->last_issue, &io_u->issue_time,
+ sizeof(struct timeval));
/*
* async engine, set the timeout here
*/
if (ret == FIO_Q_QUEUED &&
- mtime_since(&td->timeout_end, &io_u->issue_time) < IO_U_TIMEOUT)
+ (mtime_since(&td->timeout_end, &io_u->issue_time)
+ < IO_U_TIMEOUT)) {
io_u_set_timeout(td);
+ }
}
return ret;
if (td->io_ops->init) {
ret = td->io_ops->init(td);
- if (ret && td->o.iodepth > 1)
- log_err("fio: io engine init failed. Perhaps try reducing io depth?\n");
+ if (ret && td->o.iodepth > 1) {
+ log_err("fio: io engine init failed. Perhaps try"
+ " reducing io depth?\n");
+ }
}
return ret;
if (td->io_ops->open_file(td, f)) {
if (td->error == EINVAL && td->o.odirect)
log_err("fio: destination does not support O_DIRECT\n");
- if (td->error == EMFILE)
- log_err("fio: try reducing/setting openfiles (failed at %u of %u)\n", td->nr_open_files, td->o.nr_files);
+ if (td->error == EMFILE) {
+ log_err("fio: try reducing/setting openfiles (failed"
+ " at %u of %u)\n", td->nr_open_files,
+ td->o.nr_files);
+ }
return 1;
}
}
f->last_free_lookup = 0;
- f->last_completed_pos = 0;
f->last_pos = f->file_offset;
f->flags |= FIO_FILE_OPEN;
f->flags &= ~FIO_FILE_CLOSING;
if (td->o.fadvise_hint &&
(f->filetype == FIO_TYPE_BD || f->filetype == FIO_TYPE_FILE)) {
-
int flags;
if (td_random(td))
*/
f->flags |= FIO_FILE_CLOSING;
+ unlock_file_all(td, f);
+
return put_file(td, f);
}