for_each_td(td, i) {
if (group_id == TERMINATE_ALL || groupid == td->groupid) {
+ kill(td->pid, SIGQUIT);
td->terminate = 1;
td->start_delay = 0;
if (forced_kill)
unsigned long spent;
unsigned long rate;
+ /*
+ * No minimum rate set, always ok
+ */
+ if (!td->ratemin)
+ return 0;
+
/*
* allow a 2 second settle period in the beginning
*/
}
/*
- * The main verify engine. Runs over the writes we previusly submitted,
+ * The main verify engine. Runs over the writes we previously submitted,
* reads the blocks back in, and checks the crc/md5 of the data.
*/
static void do_verify(struct thread_data *td)
io_u = NULL;
while (!td->terminate) {
+ int ret2;
+
io_u = __get_io_u(td);
if (!io_u)
break;
case FIO_Q_COMPLETED:
if (io_u->error)
ret = -io_u->error;
- if (io_u->xfer_buflen != io_u->resid && io_u->resid) {
+ else if (io_u->xfer_buflen != io_u->resid && io_u->resid) {
int bytes = io_u->xfer_buflen - io_u->resid;
io_u->xfer_buflen = io_u->resid;
break;
case FIO_Q_BUSY:
requeue_io_u(td, &io_u);
- ret = td_io_commit(td);
+ ret2 = td_io_commit(td);
+ if (ret2 < 0)
+ ret = ret2;
break;
default:
assert(ret < 0);
long bytes_done = 0;
int min_evts = 0;
struct io_u *io_u;
+ int ret2;
if (td->terminate)
break;
switch (ret) {
case FIO_Q_COMPLETED:
- if (io_u->error) {
- ret = io_u->error;
- break;
- }
- if (io_u->xfer_buflen != io_u->resid && io_u->resid) {
+ if (io_u->error)
+ ret = -io_u->error;
+ else if (io_u->xfer_buflen != io_u->resid && io_u->resid) {
int bytes = io_u->xfer_buflen - io_u->resid;
io_u->xfer_buflen = io_u->resid;
*/
if (td->io_ops->commit == NULL)
io_u_queued(td, io_u);
- else if (td->io_u_queued >= td->iodepth_batch)
- ret = td_io_commit(td);
break;
case FIO_Q_BUSY:
requeue_io_u(td, &io_u);
- ret = td_io_commit(td);
+ ret2 = td_io_commit(td);
+ if (ret2 < 0)
+ ret = ret2;
break;
default:
assert(ret < 0);
if (WIFSIGNALED(status)) {
int sig = WTERMSIG(status);
- log_err("fio: pid=%d, got signal=%d\n", td->pid, sig);
+ if (sig != SIGQUIT)
+ log_err("fio: pid=%d, got signal=%d\n", td->pid, sig);
td_set_runstate(td, TD_REAPED);
goto reaped;
}