summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Axboe <jens.axboe@oracle.com>2007-04-17 09:06:43 +0200
committerJens Axboe <jens.axboe@oracle.com>2007-04-17 09:06:43 +0200
commit8cc7afa91ddc5a0980b9d2dbfdd66e1511a0d4b1 (patch)
tree389ad700f173f402c10c1f5552ef8cd1e2fa3256
parentd424d4dd657eaf4aeb8ffb07a550a5f64940f41a (diff)
downloadfio-8cc7afa91ddc5a0980b9d2dbfdd66e1511a0d4b1.tar.gz
Better checks for disk util init
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
-rw-r--r--diskutil.c9
-rw-r--r--os/os-linux.h9
-rw-r--r--os/os.h2
3 files changed, 12 insertions, 8 deletions
diff --git a/diskutil.c b/diskutil.c
index a87435af..11d676fc 100644
--- a/diskutil.c
+++ b/diskutil.c
@@ -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);
}
diff --git a/os/os-linux.h b/os/os-linux.h
index 561b273d..90349016 100644
--- a/os/os-linux.h
+++ b/os/os-linux.h
@@ -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 104f4a81..e630627f 100644
--- 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