static struct itimerval itimer;
static struct list_head disk_list = LIST_HEAD_INIT(disk_list);
+static dev_t last_dev;
/*
* Cheasy number->string conversion, complete with carry rounding error.
if (disk_util_exists(dev))
return;
+
+ /*
+ * for an fs without a device, we will repeatedly stat through
+ * sysfs which can take oodles of time for thousands of files. so
+ * cache the last lookup and compare with that before going through
+ * everything again.
+ */
+ if (dev == last_dev)
+ return;
+
+ last_dev = dev;
sprintf(foo, "/sys/block");
if (!find_block_dir(dev, foo))
else
fprintf(f_out, "%s: (groupid=%d): err=%2d (%s): pid=%d\n",td->name, td->groupid, td->error, td->verror, td->pid);
- show_ddir_status(td, rs, td->ddir);
- if (td->io_bytes[td->ddir ^ 1])
- show_ddir_status(td, rs, td->ddir ^ 1);
+ if (td_read(td))
+ show_ddir_status(td, rs, DDIR_READ);
+ if (td_write(td))
+ show_ddir_status(td, rs, DDIR_WRITE);
runtime = mtime_since(&td->epoch, &td->end_time);
if (runtime) {