/* * Must be serialized by caller. */ int workqueue_enqueue(struct workqueue *wq, struct io_u *io_u) { struct submit_worker *sw; sw = get_submit_worker(wq); if (sw) { const enum fio_ddir ddir = acct_ddir(io_u); struct thread_data *parent = wq->td; if (ddir_rw(ddir)) { parent->io_issues[ddir]++; parent->io_issue_bytes[ddir] += io_u->xfer_buflen; parent->rate_io_issue_bytes[ddir] += io_u->xfer_buflen; } pthread_mutex_lock(&sw->lock); flist_add_tail(&io_u->verify_list, &sw->work_list); sw->seq = ++wq->work_seq; sw->flags &= ~SW_F_IDLE; pthread_mutex_unlock(&sw->lock); pthread_cond_signal(&sw->cond); return FIO_Q_QUEUED; } return FIO_Q_BUSY; }
/* * Must be serialized by caller. Returns true for queued, false for busy. */ void workqueue_enqueue(struct workqueue *wq, struct workqueue_work *work) { struct submit_worker *sw; sw = get_submit_worker(wq); assert(sw); pthread_mutex_lock(&sw->lock); flist_add_tail(&work->list, &sw->work_list); sw->seq = ++wq->work_seq; sw->flags &= ~SW_F_IDLE; pthread_mutex_unlock(&sw->lock); pthread_cond_signal(&sw->cond); }