solved was Re: Linux 3.0 oopses when pulling a USB CDROM

Andi Kleen
2011-07-07T20:47:49Z

> 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.