[lkml]   [2001]   [Nov]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Patch in this message
SubjectRe: CDROM ioctl bug (fwd)
That patch is flawed as Jens and I found out the hard way
in the sg driver. The scsi_do_req() can lead to the pointer
chain on the following assignment into q being invalid (in
the worst case).

The easy fix is to move the assignment into q _before_
the call to scsi_do_req().

Doug Gilbert

Peter Osterlund <> wrote:

Ron Lawrence <> writes:

> busy. Here are the symptoms of my problem : doing reads from a CDROM
> device intermingled with CDROM_MEDIA_CHANGED ioctls causes long pauses
> during the ioctl. This behavior started in 2.4.10. The ioctl can take a
> very long time to return, especially if reading large chunks.

This patch fixes the problem for my USB CDROM device. Maybe a similar
patch is needed for the IDE case, I haven't looked yet.

In general, who is responsible for unplugging the request queue after
queuing an ioctl command?

--- linux/drivers/scsi/scsi.c.old Thu Nov 29 00:42:16 2001
+++ linux/drivers/scsi/scsi.c Thu Nov 29 00:32:28 2001
@@ -767,14 +767,17 @@
void scsi_wait_req (Scsi_Request * SRpnt, const void *cmnd ,
void *buffer, unsigned bufflen,
int timeout, int retries)
+ request_queue_t *q;

SRpnt->sr_request.waiting = &wait;
SRpnt->sr_request.rq_status = RQ_SCSI_BUSY;
scsi_do_req (SRpnt, (void *) cmnd,
buffer, bufflen, scsi_wait_done, timeout, retries);
+ q = &SRpnt->sr_device->request_queue;
+ generic_unplug_device(q);
SRpnt->sr_request.waiting = NULL;
if( SRpnt->sr_command != NULL )
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at
 \ /
  Last update: 2005-03-22 13:13    [W:0.037 / U:0.112 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site