blktrace: add back conversion
authorEdward Shishkin <edward@redhat.com>
Tue, 15 Dec 2009 17:47:59 +0000 (18:47 +0100)
committerJens Axboe <jens.axboe@oracle.com>
Tue, 20 Apr 2010 07:51:52 +0000 (09:51 +0200)
Fixup for bz 502889.

Problem:
when executing with /dev/cciss/foo (long path names)
btreplay complains (No such file or directory).

Bug:
Missed back conversion of erscores to slashes.

Solution:
Convert underscores to slashes to restore device
names that have larger paths.

Signed-off-by: Edward Shishkin <edward@redhat.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
btreplay/btreplay.c

index 2d122ca1b4439a354a31b433d5c017e0f59a2b83..cba099a159f00b2ec969a90c15f37b7f7bb1bfb8 100644 (file)
@@ -1314,6 +1314,8 @@ static void reset_input_file(struct thr_info *tip)
  */
 static void *replay_sub(void *arg)
 {
+        int i;
+       char *mdev;
        char path[MAXPATHLEN];
        struct io_bunch bunch;
        struct thr_info *tip = arg;
@@ -1321,8 +1323,15 @@ static void *replay_sub(void *arg)
 
        pin_to_cpu(tip);
 
-       sprintf(path, "/dev/%s", map_dev(tip->devnm));
-
+       mdev = map_dev(tip->devnm);
+       sprintf(path, "/dev/%s", mdev);
+       /*
+        * convert underscores to slashes to
+        * restore device names that have larger paths
+        */
+       for (i = 0; i < strlen(mdev); i++)
+               if (path[strlen("/dev/") + i] == '_')
+                       path[strlen("/dev/") + i] = '/';
 #ifdef O_NOATIME
        oflags = O_NOATIME;
 #else