Messages in this thread | | | Date | Thu, 7 Jul 2011 22:47:47 +0200 | From | Andi Kleen <> | Subject | solved was Re: Linux 3.0 oopses when pulling a USB CDROM |
| |
> Would you like to try this patch to see if it fixes the problem? As I > said before, I'm not certain it's the best thing to do, but it worked > on my system.
Sorry for the delay. I can confirm this patch fixes the problem for me. I did a few pulls and all performed fine. Thanks!
-Andi > > Alan Stern > > > > > Index: usb-3.0/drivers/scsi/scsi_lib.c > =================================================================== > --- usb-3.0.orig/drivers/scsi/scsi_lib.c > +++ usb-3.0/drivers/scsi/scsi_lib.c > @@ -1247,6 +1247,8 @@ int scsi_prep_fn(struct request_queue *q > struct scsi_device *sdev = q->queuedata; > int ret = BLKPREP_KILL; > > + if (!sdev) > + return ret; > if (req->cmd_type == REQ_TYPE_BLOCK_PC) > ret = scsi_setup_blk_pc_cmnd(sdev, req); > return scsi_prep_return(q, req, ret); > Index: usb-3.0/drivers/scsi/scsi_sysfs.c > =================================================================== > --- usb-3.0.orig/drivers/scsi/scsi_sysfs.c > +++ usb-3.0/drivers/scsi/scsi_sysfs.c > @@ -322,6 +322,8 @@ static void scsi_device_dev_release_user > kfree(evt); > } > > + /* Freeing the queue signals to block that we're done */ > + scsi_free_queue(sdev->request_queue); > blk_put_queue(sdev->request_queue); > /* NULL queue means the device can't be used */ > sdev->request_queue = NULL; > @@ -936,8 +938,6 @@ void __scsi_remove_device(struct scsi_de > /* cause the request function to reject all I/O requests */ > sdev->request_queue->queuedata = NULL; > > - /* Freeing the queue signals to block that we're done */ > - scsi_free_queue(sdev->request_queue); > put_device(dev); > } > > >
-- ak@linux.intel.com -- Speaking for myself only.
| |