提交 cad97516 编写于 作者: J Jens Axboe 提交者: Jens Axboe

elevator: abstract out the activate and deactivate functions

Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
上级 958b7f37
...@@ -269,6 +269,22 @@ void elevator_exit(elevator_t *e) ...@@ -269,6 +269,22 @@ void elevator_exit(elevator_t *e)
EXPORT_SYMBOL(elevator_exit); EXPORT_SYMBOL(elevator_exit);
static void elv_activate_rq(request_queue_t *q, struct request *rq)
{
elevator_t *e = q->elevator;
if (e->ops->elevator_activate_req_fn)
e->ops->elevator_activate_req_fn(q, rq);
}
static void elv_deactivate_rq(request_queue_t *q, struct request *rq)
{
elevator_t *e = q->elevator;
if (e->ops->elevator_deactivate_req_fn)
e->ops->elevator_deactivate_req_fn(q, rq);
}
static inline void __elv_rqhash_del(struct request *rq) static inline void __elv_rqhash_del(struct request *rq)
{ {
hlist_del_init(&rq->hash); hlist_del_init(&rq->hash);
...@@ -498,16 +514,14 @@ void elv_merge_requests(request_queue_t *q, struct request *rq, ...@@ -498,16 +514,14 @@ void elv_merge_requests(request_queue_t *q, struct request *rq,
void elv_requeue_request(request_queue_t *q, struct request *rq) void elv_requeue_request(request_queue_t *q, struct request *rq)
{ {
elevator_t *e = q->elevator;
/* /*
* it already went through dequeue, we need to decrement the * it already went through dequeue, we need to decrement the
* in_flight count again * in_flight count again
*/ */
if (blk_account_rq(rq)) { if (blk_account_rq(rq)) {
q->in_flight--; q->in_flight--;
if (blk_sorted_rq(rq) && e->ops->elevator_deactivate_req_fn) if (blk_sorted_rq(rq))
e->ops->elevator_deactivate_req_fn(q, rq); elv_deactivate_rq(q, rq);
} }
rq->cmd_flags &= ~REQ_STARTED; rq->cmd_flags &= ~REQ_STARTED;
...@@ -700,16 +714,13 @@ struct request *elv_next_request(request_queue_t *q) ...@@ -700,16 +714,13 @@ struct request *elv_next_request(request_queue_t *q)
while ((rq = __elv_next_request(q)) != NULL) { while ((rq = __elv_next_request(q)) != NULL) {
if (!(rq->cmd_flags & REQ_STARTED)) { if (!(rq->cmd_flags & REQ_STARTED)) {
elevator_t *e = q->elevator;
/* /*
* This is the first time the device driver * This is the first time the device driver
* sees this request (possibly after * sees this request (possibly after
* requeueing). Notify IO scheduler. * requeueing). Notify IO scheduler.
*/ */
if (blk_sorted_rq(rq) && if (blk_sorted_rq(rq))
e->ops->elevator_activate_req_fn) elv_activate_rq(q, rq);
e->ops->elevator_activate_req_fn(q, rq);
/* /*
* just mark as started even if we don't start * just mark as started even if we don't start
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册