block: fix a possible oops on elv_abort_queue()
I found one more mis-conversion to the 'request is always dequeued when completing' model in elv_abort_queue() during code inspection. Although I haven't hit any problem caused by this mis-conversion yet and just done compile/boot test, please apply if you have no problem. Request must be dequeued when it completes. However, elv_abort_queue() completes requests without dequeueing. This will cause oops in the __blk_end_request_all(). This patch fixes the oops. Signed-off-by: Kiyoshi Ueda <k-ueda@ct.jp.nec.com> Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
@@ -813,6 +813,11 @@ void elv_abort_queue(struct request_queue *q)
|
|||||||
rq = list_entry_rq(q->queue_head.next);
|
rq = list_entry_rq(q->queue_head.next);
|
||||||
rq->cmd_flags |= REQ_QUIET;
|
rq->cmd_flags |= REQ_QUIET;
|
||||||
trace_block_rq_abort(q, rq);
|
trace_block_rq_abort(q, rq);
|
||||||
|
/*
|
||||||
|
* Mark this request as started so we don't trigger
|
||||||
|
* any debug logic in the end I/O path.
|
||||||
|
*/
|
||||||
|
blk_start_request(rq);
|
||||||
__blk_end_request_all(rq, -EIO);
|
__blk_end_request_all(rq, -EIO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user