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);
}
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
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
#endif
#ifndef FIO_HAVE_RAWBIND
-#define fio_lookup_raw(dev, majdev, mindev)
+#define fio_lookup_raw(dev, majdev, mindev) 1
#endif
#endif