block: use rq complete marking in blk_abort_request()
We cannot abort a request if we raced with the timeout handler already, or with the IO completion. So make blk_abort_request() mark the request as complete, and only continue if we succeeded. Found and suggested by Mike Anderson <andmike@linux.vnet.ibm.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
581d4e28d9
commit
7ba1fbaa4a
|
@ -158,6 +158,8 @@ void blk_rq_timed_out_timer(unsigned long data)
|
||||||
*/
|
*/
|
||||||
void blk_abort_request(struct request *req)
|
void blk_abort_request(struct request *req)
|
||||||
{
|
{
|
||||||
|
if (blk_mark_rq_complete(req))
|
||||||
|
return;
|
||||||
blk_delete_timer(req);
|
blk_delete_timer(req);
|
||||||
blk_rq_timed_out(req);
|
blk_rq_timed_out(req);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue