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);
return 1;
}
+#ifdef CONFIG_SFAA
static void sum_val(uint64_t *dst, uint64_t *src)
{
if (*src) {
*src = 0;
}
}
+#else
+static void sum_val(uint64_t *dst, uint64_t *src)
+{
+ if (*src) {
+ *dst += *src;
+ *src = 0;
+ }
+}
+#endif
static void sum_ddir(struct thread_data *dst, struct thread_data *src,
enum fio_ddir ddir)
{
+#ifndef CONFIG_SFAA
+ pthread_mutex_lock(&dst->io_wq.stat_lock);
+ pthread_mutex_lock(&src->io_wq.stat_lock);
+#endif
+
sum_val(&dst->io_bytes[ddir], &src->io_bytes[ddir]);
sum_val(&dst->io_blocks[ddir], &src->io_blocks[ddir]);
sum_val(&dst->this_io_blocks[ddir], &src->this_io_blocks[ddir]);
sum_val(&dst->this_io_bytes[ddir], &src->this_io_bytes[ddir]);
sum_val(&dst->bytes_done[ddir], &src->bytes_done[ddir]);
+
+#ifndef CONFIG_SFAA
+ pthread_mutex_unlock(&src->io_wq.stat_lock);
+ pthread_mutex_unlock(&dst->io_wq.stat_lock);
+#endif
}
static void update_accounting(struct submit_worker *sw)
free(wq->workers);
pthread_mutex_destroy(&wq->flush_lock);
pthread_cond_destroy(&wq->flush_cond);
+ pthread_mutex_destroy(&wq->stat_lock);
}
static int start_worker(struct workqueue *wq, unsigned int index)
wq->next_free_worker = 0;
pthread_cond_init(&wq->flush_cond, NULL);
pthread_mutex_init(&wq->flush_lock, NULL);
+ pthread_mutex_init(&wq->stat_lock, NULL);
wq->workers = calloc(wq->max_workers, sizeof(struct submit_worker));
break;
wq->max_workers = i;
- if (!wq->max_workers) {
-err:
- log_err("Can't create rate workqueue\n");
- td_verror(td, ESRCH, "workqueue_init");
- workqueue_exit(wq);
- return 1;
- }
+ if (!wq->max_workers)
+ goto err;
/*
* Wait for them all to be started and initialized
pthread_mutex_unlock(&wq->flush_lock);
} while (1);
- if (error)
- goto err;
+ if (!error)
+ return 0;
- return 0;
+err:
+ log_err("Can't create rate workqueue\n");
+ td_verror(td, ESRCH, "workqueue_init");
+ workqueue_exit(wq);
+ return 1;
}