|
@@ -2215,7 +2215,8 @@ bfq_setup_cooperator(struct bfq_data *bfqd, struct bfq_queue *bfqq,
|
|
|
|
|
|
|
|
if (in_service_bfqq && in_service_bfqq != bfqq &&
|
|
if (in_service_bfqq && in_service_bfqq != bfqq &&
|
|
|
likely(in_service_bfqq != &bfqd->oom_bfqq) &&
|
|
likely(in_service_bfqq != &bfqd->oom_bfqq) &&
|
|
|
- bfq_rq_close_to_sector(io_struct, request, bfqd->last_position) &&
|
|
|
|
|
|
|
+ bfq_rq_close_to_sector(io_struct, request,
|
|
|
|
|
+ bfqd->in_serv_last_pos) &&
|
|
|
bfqq->entity.parent == in_service_bfqq->entity.parent &&
|
|
bfqq->entity.parent == in_service_bfqq->entity.parent &&
|
|
|
bfq_may_be_close_cooperator(bfqq, in_service_bfqq)) {
|
|
bfq_may_be_close_cooperator(bfqq, in_service_bfqq)) {
|
|
|
new_bfqq = bfq_setup_merge(bfqq, in_service_bfqq);
|
|
new_bfqq = bfq_setup_merge(bfqq, in_service_bfqq);
|
|
@@ -2755,6 +2756,8 @@ update_rate_and_reset:
|
|
|
bfq_update_rate_reset(bfqd, rq);
|
|
bfq_update_rate_reset(bfqd, rq);
|
|
|
update_last_values:
|
|
update_last_values:
|
|
|
bfqd->last_position = blk_rq_pos(rq) + blk_rq_sectors(rq);
|
|
bfqd->last_position = blk_rq_pos(rq) + blk_rq_sectors(rq);
|
|
|
|
|
+ if (RQ_BFQQ(rq) == bfqd->in_service_queue)
|
|
|
|
|
+ bfqd->in_serv_last_pos = bfqd->last_position;
|
|
|
bfqd->last_dispatch = now_ns;
|
|
bfqd->last_dispatch = now_ns;
|
|
|
}
|
|
}
|
|
|
|
|
|