Good point.
I tested your suggested patch fix and it works well in my test use case.
BTW, I've got test code in my just tested version of your patch to read the
kref of the sdev_gendev between the calls to scsi_run_queue and
put_device to increase the likelihood that the use case has actually
been tested.
> -----Original Message-----
> From: James Bottomley [mailto:[email protected]]
> Sent: Tuesday, November 08, 2005 12:02 PM
> To: goggin, edward
> Cc: 'Andrew Morton'; Masanari Iida;
> [email protected];
> [email protected]; [email protected]
> Subject: RE: oops with USB Storage on 2.6.14
>
> On Tue, 2005-11-08 at 11:24 -0500, goggin, edward wrote:
> > ! struct scsi_device *sdev = cmd->device;
> > ! struct request_queue *q = sdev->request_queue;
> > !
> > ! // need to hold a reference on the device before we let
> go of the
> > cmd
> > ! if (scsi_device_get(sdev)) {
> > ! scsi_put_command(cmd);
> > ! return; // maybe sdev_state ==
> SDEV_CANCEL, SDEV_DEL
> > ! }
> >
> > scsi_put_command(cmd);
> > scsi_run_queue(q);
> > +
> > + // ok to remove device now
> > + scsi_device_put(sdev);
>
> This is the right idea, I think, but not necessarily the right fix.
> scsi_device_get() will fail if the device is going offline,
> but we would
> still need to run the queues.
>
> try this sequence instead:
>
> get_device(&sdev->sdev_gendev);
> scsi_put_command(cmd);
> scsi_run_queue(q);
> put_device(&sdev->sdev_gendev);
>
> James
>
>
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]