From: Kiyoshi Ueda Date: Tue, 2 Jun 2009 06:44:01 +0000 (+0200) Subject: block: fix a possible oops on elv_abort_queue() X-Git-Tag: v2.6.31-rc1~389^2~24 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=53c663ce0f39ba8e8ef652e400b317bc60ac7f19;p=karo-tx-linux.git 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 Signed-off-by: Jun'ichi Nomura Signed-off-by: Jens Axboe --- diff --git a/block/elevator.c b/block/elevator.c index bd78f693fcf2..a029cfed80da 100644 --- a/block/elevator.c +++ b/block/elevator.c @@ -813,6 +813,11 @@ void elv_abort_queue(struct request_queue *q) rq = list_entry_rq(q->queue_head.next); rq->cmd_flags |= REQ_QUIET; 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); } }