Don't completely fail for block device flushing failure
[fio.git] / filesetup.c
index 0abce8cbfe5b685d67518690eb3fcc8c675f4d96..fb9219199e31ca378a24b2662f246167abe6a3fe 100644 (file)
@@ -344,9 +344,13 @@ int file_invalidate_cache(struct thread_data *td, struct fio_file *f)
                ret = madvise(f->mmap, f->file_size, MADV_DONTNEED);
        else if (f->filetype == FIO_TYPE_FILE)
                ret = fadvise(f->fd, f->file_offset, f->file_size, POSIX_FADV_DONTNEED);
                ret = madvise(f->mmap, f->file_size, MADV_DONTNEED);
        else if (f->filetype == FIO_TYPE_FILE)
                ret = fadvise(f->fd, f->file_offset, f->file_size, POSIX_FADV_DONTNEED);
-       else if (f->filetype == FIO_TYPE_BD)
+       else if (f->filetype == FIO_TYPE_BD) {
                ret = blockdev_invalidate_cache(f->fd);
                ret = blockdev_invalidate_cache(f->fd);
-       else if (f->filetype == FIO_TYPE_CHAR)
+               if (ret < 0 && errno == EACCES && geteuid()) {
+                       log_err("fio: only root may flush block devices. Cache flush bypassed!\n");
+                       ret = 0;
+               }
+       } else if (f->filetype == FIO_TYPE_CHAR)
                ret = 0;
 
        if (ret < 0) {
                ret = 0;
 
        if (ret < 0) {