Use ENOTSUP if OS doesn't support blkdev page cache invalidation
authorTomohiro Kusumi <tkusumi@tuxera.com>
Mon, 13 Mar 2017 18:15:00 +0000 (20:15 +0200)
committerJens Axboe <axboe@fb.com>
Mon, 13 Mar 2017 18:27:31 +0000 (12:27 -0600)
The return value of blockdev_invalidate_cache() has been platform
dependent (some pretend success, others return EINVAL) while Linux
is the only one actually supports this via Linux specific ioctl.

This commit makes all the rest return a consistent value ENOTSUP,
so __file_invalidate_cache() prints a blkdev invalidation failure
message that is consistent and makes sense.

Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
filesetup.c
os/os-aix.h
os/os-dragonfly.h
os/os-freebsd.h
os/os-hpux.h
os/os-mac.h
os/os-netbsd.h
os/os-openbsd.h
os/os-solaris.h
os/os-windows.h

index 085d0c89fc9e6381fcc4c3dd05c6e2ddb0864a66..b04fb3e9b89362d1012883f594d9e6c7943e9fb3 100644 (file)
@@ -479,6 +479,8 @@ static int __file_invalidate_cache(struct thread_data *td, struct fio_file *f,
                }
                if (ret < 0)
                        errval = errno;
                }
                if (ret < 0)
                        errval = errno;
+               else if (ret) /* probably not supported */
+                       errval = ret;
        } else if (f->filetype == FIO_TYPE_CHAR ||
                   f->filetype == FIO_TYPE_PIPE) {
                dprint(FD_IO, "invalidate not supported %s\n", f->file_name);
        } else if (f->filetype == FIO_TYPE_CHAR ||
                   f->filetype == FIO_TYPE_PIPE) {
                dprint(FD_IO, "invalidate not supported %s\n", f->file_name);
@@ -492,7 +494,8 @@ static int __file_invalidate_cache(struct thread_data *td, struct fio_file *f,
         * continue on our way.
         */
        if (errval)
         * continue on our way.
         */
        if (errval)
-               log_info("fio: cache invalidation of %s failed: %s\n", f->file_name, strerror(errval));
+               log_info("fio: cache invalidation of %s failed: %s\n",
+                        f->file_name, strerror(errval));
 
        return 0;
 
 
        return 0;
 
index 3d677650934e8a762d6651f32cfa5ee096b47b69..bdc190a97734b495852cce7192a9ed2d050054a9 100644 (file)
@@ -23,7 +23,7 @@
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
-       return EINVAL;
+       return ENOTSUP;
 }
 
 static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)
 }
 
 static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)
index 97452cad6b22b0c87bb6fa851250a6bd1c5b15df..8a116e60b5deefa43e189496fb5accdb9d4d69df 100644 (file)
@@ -184,7 +184,7 @@ static inline int chardev_size(struct fio_file *f, unsigned long long *bytes)
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
-       return EINVAL;
+       return ENOTSUP;
 }
 
 static inline unsigned long long os_phys_mem(void)
 }
 
 static inline unsigned long long os_phys_mem(void)
index 9d1af3b4c49f5a15ab0cb2250130b5ea3ffd091a..c7863b5e02eb5b978f266cc5d9329827c1819aca 100644 (file)
@@ -82,7 +82,7 @@ static inline int chardev_size(struct fio_file *f, unsigned long long *bytes)
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
-       return EINVAL;
+       return ENOTSUP;
 }
 
 static inline unsigned long long os_phys_mem(void)
 }
 
 static inline unsigned long long os_phys_mem(void)
index 82acd1105fc51aa22f3976643a18999b245ebb3e..1707ddd8cedcf924abc1de0a26b3345be82b4495 100644 (file)
@@ -44,7 +44,7 @@ typedef struct aiocb64 os_aiocb_t;
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
-       return EINVAL;
+       return ENOTSUP;
 }
 
 static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)
 }
 
 static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)
index 0903a6fec5c4cd508ff5fefeca69a7e0b9652063..7de36ea79aa7b43a7f962796526cf000a2458527 100644 (file)
@@ -77,7 +77,7 @@ static inline int chardev_size(struct fio_file *f, unsigned long long *bytes)
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
-       return EINVAL;
+       return ENOTSUP;
 }
 
 static inline unsigned long long os_phys_mem(void)
 }
 
 static inline unsigned long long os_phys_mem(void)
index 2133d7a11b6dff9648d885c4285140ce8806a827..e6ba5081d14eacab5687e7a628213870041dedca 100644 (file)
@@ -54,7 +54,7 @@ static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
-       return EINVAL;
+       return ENOTSUP;
 }
 
 static inline unsigned long long os_phys_mem(void)
 }
 
 static inline unsigned long long os_phys_mem(void)
index 3b1948321bcbb6e39fa881f0c74893c6ec431c88..7def4326786d9b8e9d24f5f69b3d6fa0dd556462 100644 (file)
@@ -53,7 +53,7 @@ static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
-       return EINVAL;
+       return ENOTSUP;
 }
 
 static inline unsigned long long os_phys_mem(void)
 }
 
 static inline unsigned long long os_phys_mem(void)
index 5b78cc2cc43cb384fb8d5e6e1f952bd6f618c1b6..73ad84a31e477a9225db23cf480c1d7121d07a63 100644 (file)
@@ -61,7 +61,7 @@ static inline int chardev_size(struct fio_file *f, unsigned long long *bytes)
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
-       return 0;
+       return ENOTSUP;
 }
 
 static inline unsigned long long os_phys_mem(void)
 }
 
 static inline unsigned long long os_phys_mem(void)
index 616ad43567b0719a92f9f2ecee6143a15a0b0e46..0c8c42d39a24bc5e2afc2115bee0deb9dbdc91e9 100644 (file)
@@ -152,9 +152,7 @@ static inline int chardev_size(struct fio_file *f, unsigned long long *bytes)
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
-       /* There's no way to invalidate the cache in Windows
-        * so just pretend to succeed */
-       return 0;
+       return ENOTSUP;
 }
 
 static inline unsigned long long os_phys_mem(void)
 }
 
 static inline unsigned long long os_phys_mem(void)