From: "Pekka Enberg" <penberg@cs.helsinki.fi>
To: "Rene Herman" <rene.herman@gmail.com>
Cc: "Jens Axboe" <jens.axboe@oracle.com>,
"Al Viro" <viro@ftp.linux.org.uk>,
"Linux Kernel" <linux-kernel@vger.kernel.org>
Subject: Re: mcdx -- do_request(): non-read command to cd!!
Date: Sun, 1 Apr 2007 13:06:59 +0300 [thread overview]
Message-ID: <84144f020704010306q600f58ddge1d42753362cf4e2@mail.gmail.com> (raw)
In-Reply-To: <460EA727.8070306@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 729 bytes --]
On 3/31/07, Rene Herman <rene.herman@gmail.com> wrote:
> There's quite a bit of noise in dmesg though. Repeated 5 times:
>
> ===BUG: scheduling while atomic: mount/0x00000001/1166
> [<c1170bff>] __sched_text_start+0x57/0x574
> [<c1171964>] schedule_timeout+0x70/0x8f
> [<c10199b2>] process_timeout+0x0/0x5
> [<c11716a2>] interruptible_sleep_on_timeout+0x5d/0xa5
> [<c100e695>] default_wake_function+0x0/0xc
> [<c482b8fb>] mcdx_xfer+0xae/0x2a5 [mcdx]
[snip]
> [<c482b473>] do_mcdx_request+0x9b/0xd2 [mcdx]
> [<c1096d06>] __generic_unplug_device+0x1d/0x1f
> [<c1096d19>] generic_unplug_device+0x11/0x29
Looks like mcdx_xfer is sleeping while holding q->queue_lock. The
attached (untested) patch should fix it.
[-- Attachment #2: mcdx-drop-queue_lock-before-sleeping --]
[-- Type: application/octet-stream, Size: 1588 bytes --]
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);
}
next prev parent reply other threads:[~2007-04-01 10:07 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-30 21:21 Rene Herman
2007-03-31 6:47 ` Jens Axboe
2007-03-31 18:23 ` Rene Herman
2007-04-01 10:06 ` Pekka Enberg [this message]
2007-04-01 10:16 ` Pekka Enberg
2007-04-02 0:02 ` Rene Herman
2007-04-02 0:07 ` Rene Herman
2007-04-02 6:50 ` Pekka J Enberg
2007-04-02 7:10 ` Jens Axboe
2007-04-02 7:37 ` Pekka J Enberg
2007-04-02 8:55 ` Pekka J Enberg
2007-04-02 9:32 ` Boaz Harrosh
2007-04-02 9:42 ` Pekka J Enberg
2007-04-02 9:42 ` Jens Axboe
2007-04-02 21:02 ` Rene Herman
2007-04-02 15:18 ` Rene Herman
2007-04-02 15:45 ` Rene Herman
[not found] ` <Pine.LNX.4.64.0704021837480.6518@sbz-30.cs.Helsinki.FI>
[not found] ` <46112650.8080208@gmail.com>
[not found] ` <Pine.LNX.4.64.0704021906040.7500@sbz-30.cs.Helsinki.FI>
[not found] ` <461165FD.2010508@gmail.com>
[not found] ` <Pine.LNX.4.64.0704030908420.20080@sbz-30.cs.Helsinki.FI>
[not found] ` <Pine.LNX.4.64.0704030956330.20741@sbz-30.cs.Helsinki.FI>
2007-04-03 14:26 ` Rene Herman
2007-04-03 17:37 ` Pekka J Enberg
[not found] ` <461256C1.4020906@gmail.com>
2007-04-03 14:33 ` Pekka J Enberg
2007-04-03 17:31 ` Pekka J Enberg
2007-04-03 18:14 ` Rene Herman
2007-04-03 18:32 ` Pekka J Enberg
2007-04-04 2:10 ` Rene Herman
2007-04-04 6:30 ` Pekka Enberg
2007-04-04 6:19 ` Jens Axboe
2007-04-02 15:39 ` Rene Herman
2007-04-02 6:42 ` Jens Axboe
2007-04-02 7:07 ` Pekka Enberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=84144f020704010306q600f58ddge1d42753362cf4e2@mail.gmail.com \
--to=penberg@cs.helsinki.fi \
--cc=jens.axboe@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rene.herman@gmail.com \
--cc=viro@ftp.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®