Lines Matching refs:rq
57 #define RQ_CIC(rq) icq_to_cic((rq)->elv.icq) argument
58 #define RQ_CFQQ(rq) (struct cfq_queue *) ((rq)->elv.priv[0]) argument
59 #define RQ_CFQG(rq) (struct cfq_group *) ((rq)->elv.priv[1]) argument
2397 static void cfq_del_rq_rb(struct request *rq) in cfq_del_rq_rb() argument
2399 struct cfq_queue *cfqq = RQ_CFQQ(rq); in cfq_del_rq_rb()
2400 const int sync = rq_is_sync(rq); in cfq_del_rq_rb()
2405 elv_rb_del(&cfqq->sort_list, rq); in cfq_del_rq_rb()
2420 static void cfq_add_rq_rb(struct request *rq) in cfq_add_rq_rb() argument
2422 struct cfq_queue *cfqq = RQ_CFQQ(rq); in cfq_add_rq_rb()
2426 cfqq->queued[rq_is_sync(rq)]++; in cfq_add_rq_rb()
2428 elv_rb_add(&cfqq->sort_list, rq); in cfq_add_rq_rb()
2437 cfqq->next_rq = cfq_choose_req(cfqd, cfqq->next_rq, rq, cfqd->last_position); in cfq_add_rq_rb()
2448 static void cfq_reposition_rq_rb(struct cfq_queue *cfqq, struct request *rq) in cfq_reposition_rq_rb() argument
2450 elv_rb_del(&cfqq->sort_list, rq); in cfq_reposition_rq_rb()
2451 cfqq->queued[rq_is_sync(rq)]--; in cfq_reposition_rq_rb()
2452 cfqg_stats_update_io_remove(RQ_CFQG(rq), rq->cmd_flags); in cfq_reposition_rq_rb()
2453 cfq_add_rq_rb(rq); in cfq_reposition_rq_rb()
2454 cfqg_stats_update_io_add(RQ_CFQG(rq), cfqq->cfqd->serving_group, in cfq_reposition_rq_rb()
2455 rq->cmd_flags); in cfq_reposition_rq_rb()
2476 static void cfq_activate_request(struct request_queue *q, struct request *rq) in cfq_activate_request() argument
2481 cfq_log_cfqq(cfqd, RQ_CFQQ(rq), "activate rq, drv=%d", in cfq_activate_request()
2484 cfqd->last_position = blk_rq_pos(rq) + blk_rq_sectors(rq); in cfq_activate_request()
2487 static void cfq_deactivate_request(struct request_queue *q, struct request *rq) in cfq_deactivate_request() argument
2493 cfq_log_cfqq(cfqd, RQ_CFQQ(rq), "deactivate rq, drv=%d", in cfq_deactivate_request()
2497 static void cfq_remove_request(struct request *rq) in cfq_remove_request() argument
2499 struct cfq_queue *cfqq = RQ_CFQQ(rq); in cfq_remove_request()
2501 if (cfqq->next_rq == rq) in cfq_remove_request()
2502 cfqq->next_rq = cfq_find_next_rq(cfqq->cfqd, cfqq, rq); in cfq_remove_request()
2504 list_del_init(&rq->queuelist); in cfq_remove_request()
2505 cfq_del_rq_rb(rq); in cfq_remove_request()
2508 cfqg_stats_update_io_remove(RQ_CFQG(rq), rq->cmd_flags); in cfq_remove_request()
2509 if (rq->cmd_flags & REQ_PRIO) { in cfq_remove_request()
2547 cfq_merged_requests(struct request_queue *q, struct request *rq, in cfq_merged_requests() argument
2550 struct cfq_queue *cfqq = RQ_CFQQ(rq); in cfq_merged_requests()
2556 if (!list_empty(&rq->queuelist) && !list_empty(&next->queuelist) && in cfq_merged_requests()
2557 time_before(next->fifo_time, rq->fifo_time) && in cfq_merged_requests()
2559 list_move(&rq->queuelist, &next->queuelist); in cfq_merged_requests()
2560 rq->fifo_time = next->fifo_time; in cfq_merged_requests()
2564 cfqq->next_rq = rq; in cfq_merged_requests()
2566 cfqg_stats_update_io_merged(RQ_CFQG(rq), next->cmd_flags); in cfq_merged_requests()
2579 static int cfq_allow_merge(struct request_queue *q, struct request *rq, in cfq_allow_merge() argument
2589 if (cfq_bio_sync(bio) && !rq_is_sync(rq)) in cfq_allow_merge()
2601 return cfqq == RQ_CFQQ(rq); in cfq_allow_merge()
2749 struct request *rq) in cfq_dist_from_last() argument
2751 if (blk_rq_pos(rq) >= cfqd->last_position) in cfq_dist_from_last()
2752 return blk_rq_pos(rq) - cfqd->last_position; in cfq_dist_from_last()
2754 return cfqd->last_position - blk_rq_pos(rq); in cfq_dist_from_last()
2758 struct request *rq) in cfq_rq_close() argument
2760 return cfq_dist_from_last(cfqd, rq) <= CFQQ_CLOSE_THR; in cfq_rq_close()
2971 static void cfq_dispatch_insert(struct request_queue *q, struct request *rq) in cfq_dispatch_insert() argument
2974 struct cfq_queue *cfqq = RQ_CFQQ(rq); in cfq_dispatch_insert()
2978 cfqq->next_rq = cfq_find_next_rq(cfqd, cfqq, rq); in cfq_dispatch_insert()
2979 cfq_remove_request(rq); in cfq_dispatch_insert()
2981 (RQ_CFQG(rq))->dispatched++; in cfq_dispatch_insert()
2982 elv_dispatch_sort(q, rq); in cfq_dispatch_insert()
2985 cfqq->nr_sectors += blk_rq_sectors(rq); in cfq_dispatch_insert()
2993 struct request *rq = NULL; in cfq_check_fifo() local
3003 rq = rq_entry_fifo(cfqq->fifo.next); in cfq_check_fifo()
3004 if (time_before(jiffies, rq->fifo_time)) in cfq_check_fifo()
3005 rq = NULL; in cfq_check_fifo()
3007 return rq; in cfq_check_fifo()
3470 struct request *rq; in cfq_dispatch_request() local
3474 rq = cfq_check_fifo(cfqq); in cfq_dispatch_request()
3475 if (rq) in cfq_dispatch_request()
3484 if (!rq) in cfq_dispatch_request()
3485 rq = cfqq->next_rq; in cfq_dispatch_request()
3487 cfq_log_cfqq(cfqq->cfqd, cfqq, "fifo=%p", rq); in cfq_dispatch_request()
3492 cfq_dispatch_insert(cfqd->queue, rq); in cfq_dispatch_request()
3495 struct cfq_io_cq *cic = RQ_CIC(rq); in cfq_dispatch_request()
3865 struct request *rq) in cfq_update_io_seektime() argument
3868 sector_t n_sec = blk_rq_sectors(rq); in cfq_update_io_seektime()
3870 if (cfqq->last_request_pos < blk_rq_pos(rq)) in cfq_update_io_seektime()
3871 sdist = blk_rq_pos(rq) - cfqq->last_request_pos; in cfq_update_io_seektime()
3873 sdist = cfqq->last_request_pos - blk_rq_pos(rq); in cfq_update_io_seektime()
3932 struct request *rq) in cfq_should_preempt() argument
3956 if (rq_is_sync(rq) && !cfq_cfqq_sync(cfqq) && !cfq_cfqq_must_dispatch(cfqq)) in cfq_should_preempt()
3976 if ((rq->cmd_flags & REQ_PRIO) && !cfqq->prio_pending) in cfq_should_preempt()
3996 if (cfq_rq_close(cfqd, cfqq, rq)) in cfq_should_preempt()
4038 struct request *rq) in cfq_rq_enqueued() argument
4040 struct cfq_io_cq *cic = RQ_CIC(rq); in cfq_rq_enqueued()
4043 if (rq->cmd_flags & REQ_PRIO) in cfq_rq_enqueued()
4047 cfq_update_io_seektime(cfqd, cfqq, rq); in cfq_rq_enqueued()
4050 cfqq->last_request_pos = blk_rq_pos(rq) + blk_rq_sectors(rq); in cfq_rq_enqueued()
4064 if (blk_rq_bytes(rq) > PAGE_CACHE_SIZE || in cfq_rq_enqueued()
4074 } else if (cfq_should_preempt(cfqd, cfqq, rq)) { in cfq_rq_enqueued()
4086 static void cfq_insert_request(struct request_queue *q, struct request *rq) in cfq_insert_request() argument
4089 struct cfq_queue *cfqq = RQ_CFQQ(rq); in cfq_insert_request()
4092 cfq_init_prio_data(cfqq, RQ_CIC(rq)); in cfq_insert_request()
4094 rq->fifo_time = jiffies + cfqd->cfq_fifo_expire[rq_is_sync(rq)]; in cfq_insert_request()
4095 list_add_tail(&rq->queuelist, &cfqq->fifo); in cfq_insert_request()
4096 cfq_add_rq_rb(rq); in cfq_insert_request()
4097 cfqg_stats_update_io_add(RQ_CFQG(rq), cfqd->serving_group, in cfq_insert_request()
4098 rq->cmd_flags); in cfq_insert_request()
4099 cfq_rq_enqueued(cfqd, cfqq, rq); in cfq_insert_request()
4176 static void cfq_completed_request(struct request_queue *q, struct request *rq) in cfq_completed_request() argument
4178 struct cfq_queue *cfqq = RQ_CFQQ(rq); in cfq_completed_request()
4180 const int sync = rq_is_sync(rq); in cfq_completed_request()
4185 !!(rq->cmd_flags & REQ_NOIDLE)); in cfq_completed_request()
4193 (RQ_CFQG(rq))->dispatched--; in cfq_completed_request()
4194 cfqg_stats_update_completion(cfqq->cfqg, rq_start_time_ns(rq), in cfq_completed_request()
4195 rq_io_start_time_ns(rq), rq->cmd_flags); in cfq_completed_request()
4202 RQ_CIC(rq)->ttime.last_end_request = now; in cfq_completed_request()
4211 if (!time_after(rq->start_time + cfqd->cfq_fifo_expire[1], now)) in cfq_completed_request()
4304 static void cfq_put_request(struct request *rq) in cfq_put_request() argument
4306 struct cfq_queue *cfqq = RQ_CFQQ(rq); in cfq_put_request()
4309 const int rw = rq_data_dir(rq); in cfq_put_request()
4315 cfqg_put(RQ_CFQG(rq)); in cfq_put_request()
4316 rq->elv.priv[0] = NULL; in cfq_put_request()
4317 rq->elv.priv[1] = NULL; in cfq_put_request()
4359 cfq_set_request(struct request_queue *q, struct request *rq, struct bio *bio, in cfq_set_request() argument
4363 struct cfq_io_cq *cic = icq_to_cic(rq->elv.icq); in cfq_set_request()
4364 const int rw = rq_data_dir(rq); in cfq_set_request()
4365 const bool is_sync = rq_is_sync(rq); in cfq_set_request()
4404 rq->elv.priv[0] = cfqq; in cfq_set_request()
4405 rq->elv.priv[1] = cfqq->cfqg; in cfq_set_request()