+
+ return 0;
+}
+
+static void find_add_disk_slaves(struct thread_data *td, char *path,
+ struct disk_util *masterdu)
+{
+ DIR *dirhandle = NULL;
+ struct dirent *dirent = NULL;
+ char slavesdir[PATH_MAX], temppath[PATH_MAX], slavepath[PATH_MAX];
+ struct disk_util *slavedu = NULL;
+ int majdev, mindev;
+ ssize_t linklen;
+
+ sprintf(slavesdir, "%s/%s", path, "slaves");
+ dirhandle = opendir(slavesdir);
+ if (!dirhandle)
+ return;
+
+ while ((dirent = readdir(dirhandle)) != NULL) {
+ if (!strcmp(dirent->d_name, ".") ||
+ !strcmp(dirent->d_name, ".."))
+ continue;
+
+ sprintf(temppath, "%s%s%s", slavesdir, FIO_OS_PATH_SEPARATOR, dirent->d_name);
+ /* Can we always assume that the slaves device entries
+ * are links to the real directories for the slave
+ * devices?
+ */
+ linklen = readlink(temppath, slavepath, PATH_MAX - 0);
+ if (linklen < 0) {
+ perror("readlink() for slave device.");
+ return;
+ }
+ slavepath[linklen] = '\0';
+
+ sprintf(temppath, "%s/%s/dev", slavesdir, slavepath);
+ if (read_block_dev_entry(temppath, &majdev, &mindev)) {
+ perror("Error getting slave device numbers.");
+ return;
+ }
+
+ /*
+ * See if this maj,min already exists
+ */
+ slavedu = disk_util_exists(majdev, mindev);
+ if (slavedu)
+ continue;
+
+ sprintf(temppath, "%s%s%s", slavesdir, FIO_OS_PATH_SEPARATOR, slavepath);
+ __init_per_file_disk_util(td, majdev, mindev, temppath);
+ slavedu = disk_util_exists(majdev, mindev);
+
+ /* Should probably use an assert here. slavedu should
+ * always be present at this point. */
+ if (slavedu) {
+ slavedu->users++;
+ flist_add_tail(&slavedu->slavelist, &masterdu->slaves);
+ }