Commit 403d24bf authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] Fix cciss hang

From: Jens Axboe <axboe@suse.de>

It fixes a hang when performing large I/O's.  Has been tested and acked by
the maintainer, "Wiran, Francis" <francis.wiran@hp.com>.
parent e46e0cf2
...@@ -1887,7 +1887,7 @@ static void do_cciss_request(request_queue_t *q) ...@@ -1887,7 +1887,7 @@ static void do_cciss_request(request_queue_t *q)
BUG(); BUG();
if (( c = cmd_alloc(h, 1)) == NULL) if (( c = cmd_alloc(h, 1)) == NULL)
goto startio; goto full;
blkdev_dequeue_request(creq); blkdev_dequeue_request(creq);
...@@ -1960,8 +1960,9 @@ static void do_cciss_request(request_queue_t *q) ...@@ -1960,8 +1960,9 @@ static void do_cciss_request(request_queue_t *q)
h->maxQsinceinit = h->Qdepth; h->maxQsinceinit = h->Qdepth;
goto queue; goto queue;
startio: full:
blk_stop_queue(q); blk_stop_queue(q);
startio:
start_io(h); start_io(h);
} }
......
...@@ -1072,7 +1072,7 @@ static void blk_unplug_timeout(unsigned long data) ...@@ -1072,7 +1072,7 @@ static void blk_unplug_timeout(unsigned long data)
**/ **/
void blk_start_queue(request_queue_t *q) void blk_start_queue(request_queue_t *q)
{ {
if (test_and_clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags);
schedule_work(&q->unplug_work); schedule_work(&q->unplug_work);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment