Check if sysfs ioscheduler entry is "none"
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Mon, 8 Aug 2016 17:27:31 +0000 (02:27 +0900)
committerJens Axboe <axboe@fb.com>
Mon, 8 Aug 2016 17:31:16 +0000 (11:31 -0600)
Block devices without elevator (bio-based-dm/loop/etc) have "none"
for sysfs ioscheduler tunable, and write to this entry never fail
from the way elv_iosched_store() is implemented.

This commit checks if the entry is "none" type so as not to show
an irrelevant error message which assumes the entry has a list of
available I/O schedulers.

 # cat /sys/block/dm-0/queue/scheduler
 none
 # echo deadline > /sys/block/dm-0/queue/scheduler ; echo $?
 0
 # cat /sys/block/dm-0/queue/scheduler
 none
 # echo aaa > /sys/block/dm-0/queue/scheduler ; echo $?
 0
 # cat /sys/block/dm-0/queue/scheduler
 none

Signed-off-by: Tomohiro Kusumi <kusumi.tomohiro@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
backend.c

index 58727114ab8fb86878bb73c1bc8c7293cc58d37b..6bf5d679a5898d998f8d5efeb0ce3b9b46b99d81 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -1331,6 +1331,14 @@ static int switch_ioscheduler(struct thread_data *td)
         */
        tmp[strlen(tmp) - 1] = '\0';
 
         */
        tmp[strlen(tmp) - 1] = '\0';
 
+       /*
+        * Write to "none" entry doesn't fail, so check the result here.
+        */
+       if (!strcmp(tmp, "none")) {
+               log_err("fio: io scheduler is not tunable\n");
+               fclose(f);
+               return 0;
+       }
 
        sprintf(tmp2, "[%s]", td->o.ioscheduler);
        if (!strstr(tmp, tmp2)) {
 
        sprintf(tmp2, "[%s]", td->o.ioscheduler);
        if (!strstr(tmp, tmp2)) {