+
+void show_disk_util(int terse, struct json_object *parent,
+ struct buf_output *out)
+{
+ struct flist_head *entry;
+ struct disk_util *du;
+
+ if (!disk_util_mutex)
+ return;
+
+ fio_mutex_down(disk_util_mutex);
+
+ if (flist_empty(&disk_list)) {
+ fio_mutex_up(disk_util_mutex);
+ return;
+ }
+
+ if (output_format & FIO_OUTPUT_JSON)
+ assert(parent);
+
+ if (!terse && !(output_format & FIO_OUTPUT_JSON))
+ log_buf(out, "\nDisk stats (read/write):\n");
+
+ if (output_format & FIO_OUTPUT_JSON)
+ json_object_add_disk_utils(parent, &disk_list);
+ if (output_format & ~(FIO_OUTPUT_JSON | FIO_OUTPUT_JSON_PLUS)) {
+ flist_for_each(entry, &disk_list) {
+ du = flist_entry(entry, struct disk_util, list);
+
+ aggregate_slaves_stats(du);
+ print_disk_util(&du->dus, &du->agg, terse, out);
+ }
+ }
+
+ fio_mutex_up(disk_util_mutex);
+}
+
+void setup_disk_util(void)
+{
+ disk_util_mutex = fio_mutex_init(FIO_MUTEX_UNLOCKED);
+}