From: Chunguang Xu <brookxu@xxxxxxxxxxx> When in_service_queue needs to be preempted by task with a higher priority, we will mark it with prio_expire flag, and then expire it on the IO dispatch path. Here add prio_expire flag only. Signed-off-by: Chunguang Xu <brookxu@xxxxxxxxxxx> --- block/bfq-iosched.c | 2 ++ block/bfq-iosched.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c index e7bc5e2..6e19b5a 100644 --- a/block/bfq-iosched.c +++ b/block/bfq-iosched.c @@ -153,6 +153,7 @@ BFQ_BFQQ_FNS(wait_request); BFQ_BFQQ_FNS(non_blocking_wait_rq); BFQ_BFQQ_FNS(fifo_expire); +BFQ_BFQQ_FNS(prio_expire); BFQ_BFQQ_FNS(has_short_ttime); BFQ_BFQQ_FNS(sync); BFQ_BFQQ_FNS(IO_bound); @@ -2986,6 +2987,7 @@ static void __bfq_set_in_service_queue(struct bfq_data *bfqd, { if (bfqq) { bfq_clear_bfqq_fifo_expire(bfqq); + bfq_clear_bfqq_prio_expire(bfqq); bfqd->budgets_assigned = (bfqd->budgets_assigned * 7 + 256) / 8; diff --git a/block/bfq-iosched.h b/block/bfq-iosched.h index 674de8b..8af5ac0 100644 --- a/block/bfq-iosched.h +++ b/block/bfq-iosched.h @@ -777,6 +777,7 @@ enum bfqq_state_flags { * without idling the device */ BFQQF_fifo_expire, /* FIFO checked in this slice */ + BFQQF_prio_expire, /* should expire for higher prio queue*/ BFQQF_has_short_ttime, /* queue has a short think time */ BFQQF_sync, /* synchronous queue */ BFQQF_IO_bound, /* @@ -806,6 +807,7 @@ enum bfqq_state_flags { BFQ_BFQQ_FNS(wait_request); BFQ_BFQQ_FNS(non_blocking_wait_rq); BFQ_BFQQ_FNS(fifo_expire); +BFQ_BFQQ_FNS(prio_expire); BFQ_BFQQ_FNS(has_short_ttime); BFQ_BFQQ_FNS(sync); BFQ_BFQQ_FNS(IO_bound); -- 1.8.3.1