X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=blktrace.c;h=297a8a947af254200aed536788b095811a0d34ac;hp=f22ab1b9f2bfb96ffe057884091c534c6848a12b;hb=1c964ce59ba23b1ab515a8f0b6506329c1c3d3e1;hpb=ff58fcede39d16a2c642897cbe5a7f28b2da1950 diff --git a/blktrace.c b/blktrace.c index f22ab1b9..297a8a94 100644 --- a/blktrace.c +++ b/blktrace.c @@ -97,7 +97,8 @@ int is_blktrace(const char *filename) return 0; } -static int lookup_device(char *path, unsigned int maj, unsigned int min) +static int lookup_device(struct thread_data *td, char *path, unsigned int maj, + unsigned int min) { struct dirent *dir; struct stat st; @@ -121,7 +122,7 @@ static int lookup_device(char *path, unsigned int maj, unsigned int min) } if (S_ISDIR(st.st_mode)) { - found = lookup_device(full_path, maj, min); + found = lookup_device(td, full_path, maj, min); if (found) { strcpy(path, full_path); break; @@ -131,6 +132,20 @@ static int lookup_device(char *path, unsigned int maj, unsigned int min) 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", 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); @@ -153,6 +168,7 @@ static void trace_add_open_event(struct thread_data *td, int fileno) struct io_piece *ipo; ipo = calloc(1, sizeof(*ipo)); + init_ipo(ipo); ipo->ddir = DDIR_INVAL; ipo->fileno = fileno; @@ -183,7 +199,7 @@ static void trace_add_file(struct thread_data *td, __u32 device) return; strcpy(dev, "/dev"); - if (lookup_device(dev, maj, min)) { + if (lookup_device(td, dev, maj, min)) { int fileno; dprint(FD_BLKTRACE, "add devices %s\n", dev); @@ -200,8 +216,8 @@ static void store_ipo(struct thread_data *td, unsigned long long offset, { struct io_piece *ipo = malloc(sizeof(*ipo)); - memset(ipo, 0, sizeof(*ipo)); - INIT_FLIST_HEAD(&ipo->list); + init_ipo(ipo); + /* * the 512 is wrong here, it should be the hardware sector size... */ @@ -241,6 +257,7 @@ static void handle_trace_discard(struct thread_data *td, struct blk_io_trace *t, { struct io_piece *ipo = malloc(sizeof(*ipo)); + init_ipo(ipo); trace_add_file(td, t->device); ios[DDIR_WRITE]++;