In bfq_check_fifo(...) function, bfq_bfqq_fifo_expire(bfqq) is checked at first, and then bfq_mark_bfqq_fifo_expire(bfqq) later. I think bfq_check_fifo return NULL because of bfq_bfqq_fifo_expire(bfqq) return true. So expired request is not dispatch. Could any one explain this problem? static struct request *bfq_check_fifo(struct bfq_queue *bfqq, struct request *last) { struct request *rq; if (bfq_bfqq_fifo_expire(bfqq)) { return NULL; } bfq_mark_bfqq_fifo_expire(bfqq); ................... }