/* * row_dispatch_insert() - move request to dispatch queue * @rd: pointer to struct row_data * @rq: the request to dispatch * * This function moves the given request to the dispatch queue * */ static void row_dispatch_insert(struct row_data *rd, struct request *rq) { struct row_queue *rqueue = RQ_ROWQ(rq); row_remove_request(rd, rq); elv_dispatch_sort(rd->dispatch_queue, rq); if (rq->cmd_flags & REQ_URGENT) { WARN_ON(rd->urgent_in_flight); rd->urgent_in_flight = true; } rqueue->nr_dispatched++; row_clear_rowq_unserved(rd, rqueue->prio); row_log_rowq(rd, rqueue->prio, " Dispatched request %p nr_disp = %d", rq, rqueue->nr_dispatched); if (rqueue->prio < ROWQ_REG_PRIO_IDX) { rd->last_served_ioprio_class = IOPRIO_CLASS_RT; if (row_regular_req_pending(rd)) rd->reg_prio_starvation.starvation_counter++; if (row_low_req_pending(rd)) rd->low_prio_starvation.starvation_counter++; } else if (rqueue->prio < ROWQ_LOW_PRIO_IDX) { rd->last_served_ioprio_class = IOPRIO_CLASS_BE; rd->reg_prio_starvation.starvation_counter = 0; if (row_low_req_pending(rd)) rd->low_prio_starvation.starvation_counter++; } else { rd->last_served_ioprio_class = IOPRIO_CLASS_IDLE; rd->low_prio_starvation.starvation_counter = 0; } }
/* * row_dispatch_insert() - move request to dispatch queue * @rd: pointer to struct row_data * * This function moves the next request to dispatch from * rd->curr_queue to the dispatch queue * */ static void row_dispatch_insert(struct row_data *rd) { struct request *rq; rq = rq_entry_fifo(rd->row_queues[rd->curr_queue].rqueue.fifo.next); row_remove_request(rd->dispatch_queue, rq); elv_dispatch_add_tail(rd->dispatch_queue, rq); rd->row_queues[rd->curr_queue].rqueue.nr_dispatched++; row_clear_rowq_unserved(rd, rd->curr_queue); }
/* * row_dispatch_insert() - move request to dispatch queue * @rd: pointer to struct row_data * @queue_idx: index of the row_queue to dispatch from * * This function moves the next request to dispatch from * the given queue (row_queues[queue_idx]) to the dispatch queue * */ static void row_dispatch_insert(struct row_data *rd, int queue_idx) { struct request *rq; rq = rq_entry_fifo(rd->row_queues[queue_idx].fifo.next); row_remove_request(rd->dispatch_queue, rq); elv_dispatch_add_tail(rd->dispatch_queue, rq); rd->row_queues[queue_idx].nr_dispatched++; row_clear_rowq_unserved(rd, queue_idx); row_log_rowq(rd, queue_idx, " Dispatched request nr_disp = %d", rd->row_queues[queue_idx].nr_dispatched); }