diff options
Diffstat (limited to 'block/blk-timeout.c')
-rw-r--r-- | block/blk-timeout.c | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/block/blk-timeout.c b/block/blk-timeout.c index 1ec0d503cacd..1ba7e0aca878 100644 --- a/block/blk-timeout.c +++ b/block/blk-timeout.c | |||
@@ -122,10 +122,8 @@ void blk_rq_timed_out_timer(unsigned long data) | |||
122 | if (blk_mark_rq_complete(rq)) | 122 | if (blk_mark_rq_complete(rq)) |
123 | continue; | 123 | continue; |
124 | blk_rq_timed_out(rq); | 124 | blk_rq_timed_out(rq); |
125 | } else { | 125 | } else if (!next || time_after(next, rq->deadline)) |
126 | if (!next || time_after(next, rq->deadline)) | 126 | next = rq->deadline; |
127 | next = rq->deadline; | ||
128 | } | ||
129 | } | 127 | } |
130 | 128 | ||
131 | /* | 129 | /* |
@@ -176,16 +174,14 @@ void blk_add_timer(struct request *req) | |||
176 | BUG_ON(!list_empty(&req->timeout_list)); | 174 | BUG_ON(!list_empty(&req->timeout_list)); |
177 | BUG_ON(test_bit(REQ_ATOM_COMPLETE, &req->atomic_flags)); | 175 | BUG_ON(test_bit(REQ_ATOM_COMPLETE, &req->atomic_flags)); |
178 | 176 | ||
179 | if (req->timeout) | 177 | /* |
180 | req->deadline = jiffies + req->timeout; | 178 | * Some LLDs, like scsi, peek at the timeout to prevent a |
181 | else { | 179 | * command from being retried forever. |
182 | req->deadline = jiffies + q->rq_timeout; | 180 | */ |
183 | /* | 181 | if (!req->timeout) |
184 | * Some LLDs, like scsi, peek at the timeout to prevent | ||
185 | * a command from being retried forever. | ||
186 | */ | ||
187 | req->timeout = q->rq_timeout; | 182 | req->timeout = q->rq_timeout; |
188 | } | 183 | |
184 | req->deadline = jiffies + req->timeout; | ||
189 | list_add_tail(&req->timeout_list, &q->timeout_list); | 185 | list_add_tail(&req->timeout_list, &q->timeout_list); |
190 | 186 | ||
191 | /* | 187 | /* |