X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=blktrace.c;h=8d288b080392063775c8ad477f57ef7c8bac5791;hb=d36b072de874db57b585993c6c3b475f34ecad58;hp=3c23b973d971fb0f75011c54f7d616c64a42e931;hpb=24653680afe989c47f7555dd4f24c927c1483935;p=fio.git diff --git a/blktrace.c b/blktrace.c index 3c23b973..8d288b08 100644 --- a/blktrace.c +++ b/blktrace.c @@ -9,6 +9,7 @@ #include "flist.h" #include "fio.h" #include "blktrace_api.h" +#include "lib/linux-dev-lookup.h" #define TRACE_FIFO_SIZE 8192 @@ -108,67 +109,6 @@ int is_blktrace(const char *filename, int *need_swap) return 0; } -static int lookup_device(struct thread_data *td, char *path, unsigned int maj, - unsigned int min) -{ - struct dirent *dir; - struct stat st; - int found = 0; - DIR *D; - - D = opendir(path); - if (!D) - return 0; - - while ((dir = readdir(D)) != NULL) { - char full_path[256]; - - if (!strcmp(dir->d_name, ".") || !strcmp(dir->d_name, "..")) - continue; - - sprintf(full_path, "%s%s%s", path, FIO_OS_PATH_SEPARATOR, dir->d_name); - if (lstat(full_path, &st) == -1) { - perror("lstat"); - break; - } - - if (S_ISDIR(st.st_mode)) { - found = lookup_device(td, full_path, maj, min); - if (found) { - strcpy(path, full_path); - break; - } - } - - if (!S_ISBLK(st.st_mode)) - continue; - - /* - * If replay_redirect is set then always return this device - * upon lookup which overrides the device lookup based on - * major minor in the actual blktrace - */ - if (td->o.replay_redirect) { - dprint(FD_BLKTRACE, "device lookup: %d/%d\n overridden" - " with: %s\n", maj, min, - td->o.replay_redirect); - strcpy(path, td->o.replay_redirect); - found = 1; - break; - } - - if (maj == major(st.st_rdev) && min == minor(st.st_rdev)) { - dprint(FD_BLKTRACE, "device lookup: %d/%d\n", maj, min); - strcpy(path, full_path); - found = 1; - break; - } - } - - closedir(D); - return found; -} - #define FMINORBITS 20 #define FMINORMASK ((1U << FMINORBITS) - 1) #define FMAJOR(dev) ((unsigned int) ((dev) >> FMINORBITS)) @@ -212,9 +152,16 @@ static int trace_add_file(struct thread_data *td, __u32 device) } strcpy(dev, "/dev"); - if (lookup_device(td, dev, maj, min)) { + if (blktrace_lookup_device(td->o.replay_redirect, dev, maj, min)) { int fileno; + if (td->o.replay_redirect) + dprint(FD_BLKTRACE, "device lookup: %d/%d\n overridden" + " with: %s\n", maj, min, + td->o.replay_redirect); + else + dprint(FD_BLKTRACE, "device lookup: %d/%d\n", maj, min); + dprint(FD_BLKTRACE, "add devices %s\n", dev); fileno = add_file_exclusive(td, dev); td->o.open_files++;