提交 7838c15b 编写于 作者: A Alan Stern 提交者: Jens Axboe

Block: use round_jiffies_up()

This patch (as1159b) changes the timeout routines in the block core to
use round_jiffies_up().  There's no point in rounding the timer
deadline down, since if it expires too early we will have to restart
it.

The patch also removes some unnecessary tests when a request is
removed from the queue's timer list.
Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
上级 9c133c46
...@@ -75,14 +75,7 @@ void blk_delete_timer(struct request *req) ...@@ -75,14 +75,7 @@ void blk_delete_timer(struct request *req)
{ {
struct request_queue *q = req->q; struct request_queue *q = req->q;
/*
* Nothing to detach
*/
if (!q->rq_timed_out_fn || !req->deadline)
return;
list_del_init(&req->timeout_list); list_del_init(&req->timeout_list);
if (list_empty(&q->timeout_list)) if (list_empty(&q->timeout_list))
del_timer(&q->timeout); del_timer(&q->timeout);
} }
...@@ -142,7 +135,7 @@ void blk_rq_timed_out_timer(unsigned long data) ...@@ -142,7 +135,7 @@ void blk_rq_timed_out_timer(unsigned long data)
} }
if (next_set && !list_empty(&q->timeout_list)) if (next_set && !list_empty(&q->timeout_list))
mod_timer(&q->timeout, round_jiffies(next)); mod_timer(&q->timeout, round_jiffies_up(next));
spin_unlock_irqrestore(q->queue_lock, flags); spin_unlock_irqrestore(q->queue_lock, flags);
} }
...@@ -198,17 +191,10 @@ void blk_add_timer(struct request *req) ...@@ -198,17 +191,10 @@ void blk_add_timer(struct request *req)
/* /*
* If the timer isn't already pending or this timeout is earlier * If the timer isn't already pending or this timeout is earlier
* than an existing one, modify the timer. Round to next nearest * than an existing one, modify the timer. Round up to next nearest
* second. * second.
*/ */
expiry = round_jiffies(req->deadline); expiry = round_jiffies_up(req->deadline);
/*
* We use ->deadline == 0 to detect whether a timer was added or
* not, so just increase to next jiffy for that specific case
*/
if (unlikely(!req->deadline))
req->deadline = 1;
if (!timer_pending(&q->timeout) || if (!timer_pending(&q->timeout) ||
time_before(expiry, q->timeout.expires)) time_before(expiry, q->timeout.expires))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册