Jens, I managed to convince myself I understand why 2/2 needs this change... But rq_qos_wait() still looks suspicious to me. Why can't the main loop "break" right after io_schedule()? rq_qos_wake_function() either sets data->got_token = true or it doesn't wakeup the waiter sleeping in io_schedule() This means that data.got_token = F at the 2nd iteration is only possible after a spurious wakeup, right? But in this case we need to set state = TASK_UNINTERRUPTIBLE again to avoid busy-wait looping ? Oleg.