static long set_io_u_file(struct thread_data *td, struct io_u *io_u) { struct fio_file *f; do { f = get_next_file(td); if (IS_ERR_OR_NULL(f)) return PTR_ERR(f); io_u->file = f; get_file(f); if (!fill_io_u(td, io_u)) break; put_file_log(td, f); td_io_close_file(td, f); io_u->file = NULL; fio_file_set_done(f); td->nr_done_files++; dprint(FD_FILE, "%s: is done (%d of %d)\n", f->file_name, td->nr_done_files, td->o.nr_files); } while (1); return 0; }
void put_io_u(struct thread_data *td, struct io_u *io_u) { td_io_u_lock(td); if (io_u->file && !(io_u->flags & IO_U_F_FREE_DEF)) put_file_log(td, io_u->file); io_u->file = NULL; io_u->flags &= ~IO_U_F_FREE_DEF; io_u->flags |= IO_U_F_FREE; if (io_u->flags & IO_U_F_IN_CUR_DEPTH) td->cur_depth--; io_u_qpush(&td->io_u_freelist, io_u); td_io_u_unlock(td); td_io_u_free_notify(td); }
/* * Push IO verification to a separate thread */ int verify_io_u_async(struct thread_data *td, struct io_u *io_u) { if (io_u->file) put_file_log(td, io_u->file); pthread_mutex_lock(&td->io_u_lock); if (io_u->flags & IO_U_F_IN_CUR_DEPTH) { td->cur_depth--; io_u->flags &= ~IO_U_F_IN_CUR_DEPTH; } flist_add_tail(&io_u->verify_list, &td->verify_list); io_u->flags |= IO_U_F_FREE_DEF; pthread_mutex_unlock(&td->io_u_lock); pthread_cond_signal(&td->verify_cond); return 0; }
void put_io_u(struct thread_data *td, struct io_u *io_u) { td_io_u_lock(td); io_u->flags |= IO_U_F_FREE; io_u->flags &= ~IO_U_F_FREE_DEF; if (io_u->file) put_file_log(td, io_u->file); io_u->file = NULL; if (io_u->flags & IO_U_F_IN_CUR_DEPTH) td->cur_depth--; flist_del_init(&io_u->list); flist_add(&io_u->list, &td->io_u_freelist); td_io_u_unlock(td); td_io_u_free_notify(td); }
/* * Push IO verification to a separate thread */ int verify_io_u_async(struct thread_data *td, struct io_u **io_u_ptr) { struct io_u *io_u = *io_u_ptr; pthread_mutex_lock(&td->io_u_lock); if (io_u->file) put_file_log(td, io_u->file); if (io_u->flags & IO_U_F_IN_CUR_DEPTH) { td->cur_depth--; io_u_clear(io_u, IO_U_F_IN_CUR_DEPTH); } flist_add_tail(&io_u->verify_list, &td->verify_list); *io_u_ptr = NULL; pthread_mutex_unlock(&td->io_u_lock); pthread_cond_signal(&td->verify_cond); return 0; }