diff -ur --exclude-from /home/axboe/cdrom/exclude /opt/kernel/linux-2.4.3/drivers/block/cpqarray.c linux/drivers/block/cpqarray.c --- /opt/kernel/linux-2.4.3/drivers/block/cpqarray.c Tue Feb 13 23:13:43 2001 +++ linux/drivers/block/cpqarray.c Fri Apr 6 08:51:50 2001 @@ -906,10 +906,9 @@ struct buffer_head *bh; struct request *creq; - if (q->plugged || list_empty(queue_head)) { - start_io(h); - return; - } +next: + if (q->plugged || list_empty(queue_head)) + goto startio; creq = blkdev_entry_next_request(queue_head); if (creq->nr_segments > SG_MAX) @@ -921,15 +920,11 @@ h->ctlr, creq->rq_dev, creq); blkdev_dequeue_request(creq); complete_buffers(creq->bh, 0); - start_io(h); - return; + goto startio; } if ((c = cmd_alloc(h)) == NULL) - { - start_io(h); - return; - } + goto startio; bh = creq->bh; @@ -994,6 +989,9 @@ if (h->Qdepth > h->maxQsinceinit) h->maxQsinceinit = h->Qdepth; + goto next; + +startio: start_io(h); }