diff --git a/drivers/cdrom/mcdx.c b/drivers/cdrom/mcdx.c index f574962..e14dc03 100644 --- a/drivers/cdrom/mcdx.c +++ b/drivers/cdrom/mcdx.c @@ -577,11 +577,14 @@ static void do_mcdx_request(request_queue_t * q) if (!req) return; + spin_unlock_irq(q->queue_lock); + stuffp = req->rq_disk->private_data; if (!stuffp->present) { xwarn("do_request(): bad device: %s\n",req->rq_disk->disk_name); xtrace(REQUEST, "end_request(0): bad device\n"); + spin_lock_irq(q->queue_lock); end_request(req, 0); return; } @@ -589,6 +592,7 @@ static void do_mcdx_request(request_queue_t * q) if (stuffp->audio) { xwarn("do_request() attempt to read from audio cd\n"); xtrace(REQUEST, "end_request(0): read from audio\n"); + spin_lock_irq(q->queue_lock); end_request(req, 0); return; } @@ -599,6 +603,7 @@ static void do_mcdx_request(request_queue_t * q) if (req->cmd != READ) { xwarn("do_request(): non-read command to cd!!\n"); xtrace(REQUEST, "end_request(0): write\n"); + spin_lock_irq(q->queue_lock); end_request(req, 0); return; } @@ -613,6 +618,7 @@ static void do_mcdx_request(request_queue_t * q) req->nr_sectors); if (i == -1) { + spin_lock_irq(q->queue_lock); end_request(req, 0); goto again; } @@ -620,10 +626,12 @@ static void do_mcdx_request(request_queue_t * q) req->nr_sectors -= i; req->buffer += (i * 512); } + spin_lock_irq(q->queue_lock); end_request(req, 1); goto again; xtrace(REQUEST, "end_request(1)\n"); + spin_lock_irq(q->queue_lock); end_request(req, 1); }