Better checks for disk util init
authorJens Axboe <jens.axboe@oracle.com>
Tue, 17 Apr 2007 07:06:43 +0000 (09:06 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Tue, 17 Apr 2007 07:06:43 +0000 (09:06 +0200)
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diskutil.c
os/os-linux.h
os/os.h

index a87435afc7481ad2eb8652b8a268e2ab53ae7df7..11d676fcb00c18eaf881abb82e8eae3d0cf573ed 100644 (file)
@@ -209,15 +209,18 @@ static void __init_disk_util(struct thread_data *td, struct fio_file *f)
        int mindev, majdev;
        char *p;
 
-       if (!stat(f->file_name, &st)) {
+       if (!lstat(f->file_name, &st)) {
                if (S_ISBLK(st.st_mode)) {
                        majdev = major(st.st_rdev);
                        mindev = minor(st.st_rdev);
                } else if (S_ISCHR(st.st_mode)) {
                        majdev = major(st.st_rdev);
                        mindev = minor(st.st_rdev);
-                       fio_lookup_raw(st.st_rdev, &majdev, &mindev);
-               } else {
+                       if (fio_lookup_raw(st.st_rdev, &majdev, &mindev))
+                               return;
+               } else if (S_ISFIFO(st.st_mode))
+                       return;
+               else {
                        majdev = major(st.st_dev);
                        mindev = minor(st.st_dev);
                }
index 561b273db94e3dcd590e7e6dbfa24e39c497ba00..90349016ffe1004ae84904ec45922125f8e96b4a 100644 (file)
@@ -171,13 +171,13 @@ static inline double os_random_double(os_random_state_t *rs)
        return val;
 }
 
-static inline void fio_lookup_raw(dev_t dev, int *majdev, int *mindev)
+static inline int fio_lookup_raw(dev_t dev, int *majdev, int *mindev)
 {
        struct raw_config_request rq;
        int fd;
 
        if (major(dev) != RAW_MAJOR)
-               return;
+               return 1;
 
        /*
         * we should be able to find /dev/rawctl or /dev/raw/rawctl
@@ -186,18 +186,19 @@ static inline void fio_lookup_raw(dev_t dev, int *majdev, int *mindev)
        if (fd < 0) {
                fd = open("/dev/raw/rawctl", O_RDONLY);
                if (fd < 0)
-                       return;
+                       return 1;
        }
 
        rq.raw_minor = minor(dev);
        if (ioctl(fd, RAW_GETBIND, &rq) < 0) {
                close(fd);
-               return;
+               return 1;
        }
 
        close(fd);
        *majdev = rq.block_major;
        *mindev = rq.block_minor;
+       return 0;
 }
 
 #endif
diff --git a/os/os.h b/os/os.h
index 104f4a81a7f06a147a3c07732707aaa30258ee40..e630627fddea38f4bfbb4608fe00af1f0f2142ea 100644 (file)
--- a/os/os.h
+++ b/os/os.h
@@ -57,7 +57,7 @@
 #endif
 
 #ifndef FIO_HAVE_RAWBIND
-#define fio_lookup_raw(dev, majdev, mindev)
+#define fio_lookup_raw(dev, majdev, mindev)    1
 #endif
 
 #endif