Re: [PATCH] Oops in usb-storage.c

Jan Niehusmann
2001-10-17T01:11:08Z

On Tue, Oct 16, 2001 at 05:56:40PM -0700, Matthew Dharm wrote:
> Actually, this is a side-effect of another problem, which is that INQUIRY
> is legal for a device at any time (at least, to SCSI). What we really need
> to do is fake an INQURIY response for detached devices, separate from also
> those devices which need a faked-inquiry all the time.

Ok, then the fix could look like the following, I think. The INQUIRY
response in the disconnected case is a little bit different, as the
information from pusb_dev is not available, but the INQUIRY works and
the oops is fixed.

Jan

--- linux-2.4.12-ac3/drivers/usb/storage/usb.c.orig Mon Oct 1 12:15:29 2001
+++ linux-2.4.12-ac3/drivers/usb/storage/usb.c Wed Oct 17 03:04:32 2001
@@ -268,10 +268,12 @@
memcpy(data+16, us->unusual_dev->productName,
strlen(us->unusual_dev->productName) > 16 ? 16 :
strlen(us->unusual_dev->productName));
- data[32] = 0x30 + ((us->pusb_dev->descriptor.bcdDevice>>12) & 0x0F);
- data[33] = 0x30 + ((us->pusb_dev->descriptor.bcdDevice>>8) & 0x0F);
- data[34] = 0x30 + ((us->pusb_dev->descriptor.bcdDevice>>4) & 0x0F);
- data[35] = 0x30 + ((us->pusb_dev->descriptor.bcdDevice) & 0x0F);
+ if(us->pusb_dev) {
+ data[32] = 0x30 + ((us->pusb_dev->descriptor.bcdDevice>>12) & 0x0F);
+ data[33] = 0x30 + ((us->pusb_dev->descriptor.bcdDevice>>8) & 0x0F);
+ data[34] = 0x30 + ((us->pusb_dev->descriptor.bcdDevice>>4) & 0x0F);
+ data[35] = 0x30 + ((us->pusb_dev->descriptor.bcdDevice) & 0x0F);
+ }

if (us->srb->use_sg) {
sg = (struct scatterlist *)us->srb->request_buffer;