#include <dirent.h>
#include <libgen.h>
#include <math.h>
+#include <assert.h>
#include "fio.h"
#include "smalloc.h"
while (!flist_empty(&du->slaves)) {
struct disk_util *slave;
- slave = flist_entry(du->slaves.next, struct disk_util, slavelist);
+ slave = flist_first_entry(&du->slaves, struct disk_util, slavelist);
flist_del(&slave->slavelist);
slave->users--;
}
dprint(FD_DISKUTIL, "%s: %s", du->path, p);
- ret = sscanf(p, "%u %u %llu %u %u %u %llu %u %u %u %u\n",
- &dus->s.ios[0],
- &dus->s.merges[0], §ors[0],
- &dus->s.ticks[0], &dus->s.ios[1],
- &dus->s.merges[1], §ors[1],
- &dus->s.ticks[1], &in_flight,
- &dus->s.io_ticks,
- &dus->s.time_in_queue);
+ ret = sscanf(p, "%llu %llu %llu %llu %llu %llu %llu %llu %u %llu %llu\n",
+ (unsigned long long *) &dus->s.ios[0],
+ (unsigned long long *) &dus->s.merges[0],
+ §ors[0],
+ (unsigned long long *) &dus->s.ticks[0],
+ (unsigned long long *) &dus->s.ios[1],
+ (unsigned long long *) &dus->s.merges[1],
+ §ors[1],
+ (unsigned long long *) &dus->s.ticks[1],
+ &in_flight,
+ (unsigned long long *) &dus->s.io_ticks,
+ (unsigned long long *) &dus->s.time_in_queue);
fclose(f);
dprint(FD_DISKUTIL, "%s: stat read ok? %d\n", du->path, ret == 1);
dus->s.sectors[0] = sectors[0];
fio_mutex_down(disk_util_mutex);
- if (!disk_util_exit) {
+ if (!helper_exit) {
flist_for_each(entry, &disk_list) {
du = flist_entry(entry, struct disk_util, list);
update_io_tick_disk(du);
sfree(du);
return NULL;
}
- strncpy((char *) du->dus.name, basename(path) - 1, FIO_DU_NAME_SZ);
+ strncpy((char *) du->dus.name, basename(path), FIO_DU_NAME_SZ - 1);
du->sysfs_root = path;
du->major = majdev;
du->minor = mindev;
return;
if (!terse) {
- log_info(", aggrios=%u/%u, aggrmerge=%u/%u, aggrticks=%u/%u,"
- " aggrin_queue=%u, aggrutil=%3.2f%%",
- agg->ios[0] / agg->slavecount,
- agg->ios[1] / agg->slavecount,
- agg->merges[0] / agg->slavecount,
- agg->merges[1] / agg->slavecount,
- agg->ticks[0] / agg->slavecount,
- agg->ticks[1] / agg->slavecount,
- agg->time_in_queue / agg->slavecount,
- agg->max_util.u.f);
+ log_info(", aggrios=%llu/%llu, aggrmerge=%llu/%llu, "
+ "aggrticks=%llu/%llu, aggrin_queue=%llu, "
+ "aggrutil=%3.2f%%",
+ (unsigned long long) agg->ios[0] / agg->slavecount,
+ (unsigned long long) agg->ios[1] / agg->slavecount,
+ (unsigned long long) agg->merges[0] / agg->slavecount,
+ (unsigned long long) agg->merges[1] / agg->slavecount,
+ (unsigned long long) agg->ticks[0] / agg->slavecount,
+ (unsigned long long) agg->ticks[1] / agg->slavecount,
+ (unsigned long long) agg->time_in_queue / agg->slavecount,
+ agg->max_util.u.f);
} else {
- log_info(";slaves;%u;%u;%u;%u;%u;%u;%u;%3.2f%%",
- agg->ios[0] / agg->slavecount,
- agg->ios[1] / agg->slavecount,
- agg->merges[0] / agg->slavecount,
- agg->merges[1] / agg->slavecount,
- agg->ticks[0] / agg->slavecount,
- agg->ticks[1] / agg->slavecount,
- agg->time_in_queue / agg->slavecount,
- agg->max_util.u.f);
+ log_info(";slaves;%llu;%llu;%llu;%llu;%llu;%llu;%llu;%3.2f%%",
+ (unsigned long long) agg->ios[0] / agg->slavecount,
+ (unsigned long long) agg->ios[1] / agg->slavecount,
+ (unsigned long long) agg->merges[0] / agg->slavecount,
+ (unsigned long long) agg->merges[1] / agg->slavecount,
+ (unsigned long long) agg->ticks[0] / agg->slavecount,
+ (unsigned long long) agg->ticks[1] / agg->slavecount,
+ (unsigned long long) agg->time_in_queue / agg->slavecount,
+ agg->max_util.u.f);
}
}
while (!flist_empty(&disk_list)) {
struct disk_util *du;
- du = flist_entry(disk_list.next, struct disk_util, list);
+ du = flist_first_entry(&disk_list, struct disk_util, list);
flist_del(&du->list);
disk_util_free(du);
}
if (agg->slavecount)
log_info(" ");
- log_info(" %s: ios=%u/%u, merge=%u/%u, ticks=%u/%u, "
- "in_queue=%u, util=%3.2f%%", dus->name,
- dus->s.ios[0], dus->s.ios[1],
- dus->s.merges[0], dus->s.merges[1],
- dus->s.ticks[0], dus->s.ticks[1],
- dus->s.time_in_queue, util);
+ log_info(" %s: ios=%llu/%llu, merge=%llu/%llu, "
+ "ticks=%llu/%llu, in_queue=%llu, util=%3.2f%%",
+ dus->name,
+ (unsigned long long) dus->s.ios[0],
+ (unsigned long long) dus->s.ios[1],
+ (unsigned long long) dus->s.merges[0],
+ (unsigned long long) dus->s.merges[1],
+ (unsigned long long) dus->s.ticks[0],
+ (unsigned long long) dus->s.ticks[1],
+ (unsigned long long) dus->s.time_in_queue,
+ util);
} else {
- log_info(";%s;%u;%u;%u;%u;%u;%u;%u;%3.2f%%",
- dus->name, dus->s.ios[0],
- dus->s.ios[1], dus->s.merges[0],
- dus->s.merges[1], dus->s.ticks[0],
- dus->s.ticks[1],
- dus->s.time_in_queue, util);
+ log_info(";%s;%llu;%llu;%llu;%llu;%llu;%llu;%llu;%3.2f%%",
+ dus->name,
+ (unsigned long long) dus->s.ios[0],
+ (unsigned long long) dus->s.ios[1],
+ (unsigned long long) dus->s.merges[0],
+ (unsigned long long) dus->s.merges[1],
+ (unsigned long long) dus->s.ticks[0],
+ (unsigned long long) dus->s.ticks[1],
+ (unsigned long long) dus->s.time_in_queue,
+ util);
}
/*
return;
}
- if (!terse && !parent)
+ if (output_format == FIO_OUTPUT_JSON)
+ assert(parent);
+
+ if (!terse && output_format != FIO_OUTPUT_JSON)
log_info("\nDisk stats (read/write):\n");
- if (output_format == FIO_OUTPUT_JSON) {
+ if (output_format == FIO_OUTPUT_JSON)
json_object_add_disk_utils(parent, &disk_list);
- } else
+ else
flist_for_each(entry, &disk_list) {
du = flist_entry(entry, struct disk_util, list);