Speedup init_disk_util() when dealing with many jobs

sysfs lookups can take quite a while, so check against last device
to avoid having to iterate through sysfs again.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/stat.c b/stat.c
index 34b2b6a..a8f2b02 100644
--- a/stat.c
+++ b/stat.c
@@ -11,6 +11,7 @@
 
 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.
@@ -273,6 +274,17 @@
 
 	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))