Make I/O priority option generic for non-Linux environment [2/2]
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Tue, 19 Jul 2016 16:33:44 +0000 (01:33 +0900)
committerJens Axboe <axboe@fb.com>
Tue, 19 Jul 2016 21:45:49 +0000 (15:45 -0600)
There is a kernel that supports I/O priority with a syscall similar
to Linux (e.g. DragonFlyBSD's ioprio_set(2) which apparently seems
to have been inspired by ioprio_set(2) in Linux kernel), however
the idea of class within the syscall may not exist depending on the
I/O scheduler and its design, so "prioclass" option should be an
optional one for "prio" option.

This commit adds FIO_HAVE_IOPRIO_CLASS to separate "prioclass" from
"prio" on compile-time for those that do support priority itself,
but not priority classes.

If the platform supports I/O priority, it defines FIO_HAVE_IOPRIO
like it did before. If the platform supports I/O priority classes,
it defines FIO_HAVE_IOPRIO_CLASS in addition to above.
If FIO_HAVE_IOPRIO_CLASS is enabled, FIO_HAVE_IOPRIO must also be
enabled since FIO_HAVE_IOPRIO defines io_prioset(). This is also
checked on compile-time.

Linux (incl Android) has both of these macros enabled, so there is
no functional changes made by this commit.

Signed-off-by: Tomohiro Kusumi <kusumi.tomohiro@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
options.c
os/os-android.h
os/os-linux.h

index d2a029d14a3204f6906912f1a8dd8de458c3dbe5..4723e414c68ccd1e4b83500c95c9ca87c9a81b48 100644 (file)
--- a/options.c
+++ b/options.c
@@ -3018,6 +3018,18 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
                .category = FIO_OPT_C_GENERAL,
                .group  = FIO_OPT_G_CRED,
        },
+#else
+       {
+               .name   = "prio",
+               .lname  = "I/O nice priority",
+               .type   = FIO_OPT_UNSUPPORTED,
+               .help   = "Your platform does not support IO priorities",
+       },
+#endif
+#ifdef FIO_HAVE_IOPRIO_CLASS
+#ifndef FIO_HAVE_IOPRIO
+#error "FIO_HAVE_IOPRIO_CLASS requires FIO_HAVE_IOPRIO"
+#endif
        {
                .name   = "prioclass",
                .lname  = "I/O nice priority class",
@@ -3031,17 +3043,11 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
                .group  = FIO_OPT_G_CRED,
        },
 #else
-       {
-               .name   = "prio",
-               .lname  = "I/O nice priority",
-               .type   = FIO_OPT_UNSUPPORTED,
-               .help   = "Your platform does not support IO priorities",
-       },
        {
                .name   = "prioclass",
                .lname  = "I/O nice priority class",
                .type   = FIO_OPT_UNSUPPORTED,
-               .help   = "Your platform does not support IO priorities",
+               .help   = "Your platform does not support IO priority classes",
        },
 #endif
        {
index 9e3a3d2af5b4e048dca7cfbecd66141603ddd087..70d05702f385576208e1dcef7309438b943749dc 100644 (file)
@@ -22,6 +22,7 @@
 #define FIO_HAVE_DISK_UTIL
 #define FIO_HAVE_IOSCHED_SWITCH
 #define FIO_HAVE_IOPRIO
+#define FIO_HAVE_IOPRIO_CLASS
 #define FIO_HAVE_ODIRECT
 #define FIO_HAVE_HUGETLB
 #define FIO_HAVE_BLKTRACE
index a410497c25bf4636a42be935323d536b17bf1c72..937aade9ddfab48d8567d88653e1c9cc0e0833be 100644 (file)
@@ -25,6 +25,7 @@
 #define FIO_HAVE_DISK_UTIL
 #define FIO_HAVE_SGIO
 #define FIO_HAVE_IOPRIO
+#define FIO_HAVE_IOPRIO_CLASS
 #define FIO_HAVE_IOSCHED_SWITCH
 #define FIO_HAVE_ODIRECT
 #define FIO_HAVE_HUGETLB