Handling erroneous READ CAPACITY response in sd.c
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 20 lines · Darsen
I've tried the patches you gave me.
Unfortunately they do not work on my computer.
Here is the result of "dmesg:"usb 2-2: reset full speed USB device using address 2
usb 2-2: device not accepting address 2, error -110
usb-storage:usb_reset_devicereturns -19
scsi: Device offlined - not ready after error recovery: host 0 channel 0 id 0 lun 0sd_read_true_cap: sda: PMI not supported
scsi0 (0:0): rejecting I/O to offline devicesd_read_format_cap: sda: READ FORMAT CAPACITIES not supported SCSI device sda: 251905 512-byte hdwr sectors (129 MB)
sda: assuming Write Enabled
sda: assuming drive cache: write through
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0 Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
usb-storage: queuecommand called
usb 2-2: USB disconnect, address 2
Quoted 2 lines
It seems that the two commands you tried were not supported by my device (Apacer Audio Steno). Strange isn't it?
It's not that they are unsupported -- it's that your device crashed before they were sent!
The dmesg extract above starts way too late, after the device has already crashed. What happened before that might be of interest, but it probably won't tell us anything about the new code we want to test.
Quoted 2 lines
(I eliminated the usb-storage verbose debug messages because it was too long, if you need them I can send it to you.)
Yes, please. Maybe it contains something useful. Like why your device crashed when it used to work okay.
Quoted 4 lines
I tried another way: by correcting capacity that is not a multiple of
256. (see below)
This does work on my device, but I don't know whether it works on other machines.
No, it won't. Besides, a major point of this effort is to see if the fix_read_capacity() routine can be eliminated.
Alan Stern
Quoted 7 lines · Alan Stern
Quoted 3 lines
(I eliminated the usb-storage verbose debug messages because it was too long, if you need them I can send it to you.)
Yes, please. Maybe it contains something useful. Like why your device crashed when it used to work okay.
Here it is,
---------------------------------------------------------
parport: PnPBIOS parport detected.
parport0: PC-style at 0x378, irq 7 [PCSPP,EPP]
lp0: using parport0 (interrupt-driven).
lp0: console ready
mtrr: 0xe8000000,0x4000000 overlaps existing 0xe8000000,0x100000atkbd.c: Spurious ACK on isa0060/serio0. Some program, like XFree86, might be trying access hardware directly. atkbd.c: Spurious ACK on isa0060/serio0. Some program, like XFree86, might be trying access hardware directly. SCSI subsystem initialized
st: Version 20040403, fixed bufsize 32768, s/g segs 256ohci_hcd 0000:00:06.0: wakeup
usb 2-2: new full speed USB device using address 2
Initializing USB Mass Storage driver...
usb-storage: USB Mass Storage device detected
usb-storage: altsetting is 0, id_index is 111
usb-storage: -- associate_dev
usb-storage: Transport: Bulk
usb-storage: Protocol: Transparent SCSI
usb-storage: Endpoints: In: 0xbd18c9f4 Out: 0xbd18c9e0 Int: 0x00000000 (Period 0)
usb-storage: usb_stor_control_msg: rq=fe rqtype=a1 value=0000 index=00 len=1
usb-storage: GetMaxLUN command result is 1, data is 0
usb-storage: *** thread sleeping.
scsi0 : SCSI emulation for USB Mass Storage devices
usb-storage: queuecommand called
usb-storage: *** thread awakened.
usb-storage: Command INQUIRY (6 bytes)
usb-storage: 12 00 00 00 24 00
usb-storage: Bulk Command S 0x43425355 T 0x1 L 36 F 128 Trg 0 LUN 0 CL 6
usb-storage: usb_stor_bulk_transfer_buf: xfer 31 bytes
usb-storage: Status code 0; transferred 31/31
usb-storage: -- transfer complete
usb-storage: Bulk command transfer result=0
usb-storage: usb_stor_bulk_transfer_buf: xfer 36 bytes
usb-storage: Status code 0; transferred 36/36
usb-storage: -- transfer complete
usb-storage: Bulk data transfer result 0x0
usb-storage: Attempting to get CSW...
usb-storage: usb_stor_bulk_transfer_buf: xfer 13 bytes
usb-storage: Status code 0; transferred 13/13
usb-storage: -- transfer complete
usb-storage: Bulk status result = 0
usb-storage: Bulk Status S 0x53425355 T 0x1 R 0 Stat 0x0
usb-storage: Fixing INQUIRY data to show SCSI rev 2 - was 4
usb-storage: scsi cmd done, result=0x0
usb-storage: *** thread sleeping.
Vendor: SigmaTel Model: MSCN Rev: 0001
Type: Direct-Access ANSI SCSI revision: 02
usb-storage: queuecommand called usb-storage: *** thread awakened. usb-storage: Command TEST_UNIT_READY (6 bytes) usb-storage: 00 00 00 00 00 00 usb-storage: Bulk Command S 0x43425355 T 0x2 L 0 F 0 Trg 0 LUN 0 CL 6 usb-storage: usb_stor_bulk_transfer_buf: xfer 31 bytes usb-storage: Status code 0; transferred 31/31 usb-storage: -- transfer complete usb-storage: Bulk command transfer result=0 usb-storage: Attempting to get CSW... usb-storage: usb_stor_bulk_transfer_buf: xfer 13 bytes usb-storage: Status code 0; transferred 13/13 usb-storage: -- transfer complete usb-storage: Bulk status result = 0 usb-storage: Bulk Status S 0x53425355 T 0x2 R 0 Stat 0x0 usb-storage: scsi cmd done, result=0x0 usb-storage: *** thread sleeping. usb-storage: queuecommand called usb-storage: *** thread awakened. usb-storage: Command READ_CAPACITY (10 bytes) usb-storage: 25 00 00 00 00 00 00 00 00 00 usb-storage: Bulk Command S 0x43425355 T 0x3 L 8 F 128 Trg 0 LUN 0 CL 10 usb-storage: usb_stor_bulk_transfer_buf: xfer 31 bytes usb-storage: Status code 0; transferred 31/31 usb-storage: -- transfer complete usb-storage: Bulk command transfer result=0 usb-storage: usb_stor_bulk_transfer_buf: xfer 8 bytes usb-storage: Status code 0; transferred 8/8 usb-storage: -- transfer complete usb-storage: Bulk data transfer result 0x0 usb-storage: Attempting to get CSW... usb-storage: usb_stor_bulk_transfer_buf: xfer 13 bytes usb-storage: Status code 0; transferred 13/13 usb-storage: -- transfer complete usb-storage: Bulk status result = 0 usb-storage: Bulk Status S 0x53425355 T 0x3 R 0 Stat 0x0 usb-storage: scsi cmd done, result=0x0 usb-storage: *** thread sleeping. usb-storage: queuecommand called usb-storage: *** thread awakened. usb-storage: Command READ_CAPACITY (10 bytes) usb-storage: 25 00 00 03 d7 ff 00 00 01 00 usb-storage: Bulk Command S 0x43425355 T 0x4 L 8 F 128 Trg 0 LUN 0 CL 10 usb-storage: usb_stor_bulk_transfer_buf: xfer 31 bytes usb-storage: Status code 0; transferred 31/31 usb-storage: -- transfer complete usb-storage: Bulk command transfer result=0 usb-storage: usb_stor_bulk_transfer_buf: xfer 8 bytes usb-storage: command_abort called usb-storage: usb_stor_stop_transport called usb-storage: -- cancelling URB usb-storage: Status code -104; transferred 0/8 usb-storage: -- transfer cancelled usb-storage: Bulk data transfer result 0x4 usb-storage: -- command was aborted usb-storage: usb_stor_Bulk_reset called usb-storage: usb_stor_control_msg: rq=ff rqtype=21 value=0000 index=00 len=0 usb-storage: Timeout -- cancelling URB usb-storage: Soft reset failed: -104 usb-storage: scsi command aborted usb-storage: *** thread sleeping. usb-storage: queuecommand called usb-storage: *** thread awakened. usb-storage: Command TEST_UNIT_READY (6 bytes) usb-storage: 00 00 00 00 00 00 usb-storage: Bulk Command S 0x43425355 T 0x4 L 0 F 0 Trg 0 LUN 0 CL 6 usb-storage: usb_stor_bulk_transfer_buf: xfer 31 bytes usb-storage: command_abort called usb-storage: usb_stor_stop_transport called usb-storage: -- cancelling URB usb-storage: Status code -104; transferred 0/31 usb-storage: -- transfer cancelled usb-storage: Bulk command transfer result=4 usb-storage: -- command was aborted usb-storage: usb_stor_Bulk_reset called usb-storage: usb_stor_control_msg: rq=ff rqtype=21 value=0000 index=00 len=0 usb-storage: Soft reset failed: -110 usb-storage: scsi command aborted usb-storage: *** thread sleeping. usb-storage: device_reset called usb-storage: usb_stor_Bulk_reset called usb-storage: usb_stor_control_msg: rq=ff rqtype=21 value=0000 index=00 len=0 usb-storage: Soft reset failed: -110 usb-storage: bus_reset called usb 2-2: reset full speed USB device using address 2 usb 2-2: device not accepting address 2, error -110 usb-storage: usb_reset_device returns -19 scsi: Device offlined - not ready after error recovery: host 0 channel 0 id 0 lun 0 sd_read_true_cap: sda: PMI not supported
scsi0 (0:0): rejecting I/O to offline devicesd_read_format_cap: sda: READ FORMAT CAPACITIES not supported SCSI device sda: 251905 512-byte hdwr sectors (129 MB)
sda: assuming Write Enabled
sda: assuming drive cache: write through
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0 Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
usb-storage: queuecommand called
usb 2-2: USB disconnect, address 2
usb-storage: *** thread awakened.
usb-storage: Bad LUN (0:1)
usb-storage: scsi cmd done, result=0x40000
usb-storage: *** thread sleeping.
usb-storage: queuecommand called
usb-storage: *** thread awakened.
usb-storage: Bad target number (1:0)
usb-storage: scsi cmd done, result=0x40000
usb-storage: *** thread sleeping.
usb-storage: queuecommand called
usb-storage: *** thread awakened.
usb-storage: Bad target number (2:0)
usb-storage: scsi cmd done, result=0x40000
usb-storage: *** thread sleeping.
usb-storage: queuecommand called
usb-storage: *** thread awakened.
usb-storage: Bad target number (3:0)
usb-storage: scsi cmd done, result=0x40000
usb-storage: *** thread sleeping.
usb-storage: queuecommand called
usb-storage: *** thread awakened.
usb-storage: Bad target number (4:0)
usb-storage: scsi cmd done, result=0x40000
usb-storage: *** thread sleeping.
usb-storage: queuecommand called
usb-storage: *** thread awakened.
usb-storage: Bad target number (5:0)
usb-storage: scsi cmd done, result=0x40000
usb-storage: *** thread sleeping.
usb-storage: queuecommand called
usb-storage: *** thread awakened.
usb-storage: Bad target number (6:0)
usb-storage: scsi cmd done, result=0x40000
usb-storage: *** thread sleeping.
usb-storage: queuecommand called
usb-storage: *** thread awakened.
usb-storage: Bad target number (7:0)
usb-storage: scsi cmd done, result=0x40000
usb-storage: *** thread sleeping.
USB Mass Storage device found at 2
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
usb-storage: storage_disconnect() called
usb-storage: usb_stor_stop_transport called
usb-storage: -- usb_stor_release_resources
usb-storage: -- sending exit command to thread
usb-storage: *** thread awakened.
usb-storage: -- exit command received
usb-storage: -- dissociate_dev
usb 2-2: new full speed USB device using address 3
usb 2-2: device not accepting address 3, error -110
usb 2-2: new full speed USB device using address 4
usb 2-2: device not accepting address 4, error -110
Quoted 13 lines · Darsen
usb-storage: queuecommand called
usb-storage: *** thread awakened.
usb-storage: CommandREAD_CAPACITY(10 bytes)
usb-storage: 25 00 00 00 00 00 00 00 00 00
usb-storage: Bulk Command S0x43425355T0x3L 8 F 128 Trg 0 LUN 0 CL 10
usb-storage:usb_stor_bulk_transfer_buf: xfer 31 bytes
usb-storage: Status code 0; transferred 31/31
usb-storage: -- transfer complete
usb-storage: Bulk command transfer result=0
usb-storage:usb_stor_bulk_transfer_buf: xfer 8 bytes
usb-storage: Status code 0; transferred 8/8
usb-storage: -- transfer complete
usb-storage: Bulk data transfer result0x0
Quoted 8 lines
usb-storage: Attempting to get CSW...
usb-storage:usb_stor_bulk_transfer_buf: xfer 13 bytes
usb-storage: Status code 0; transferred 13/13
usb-storage: -- transfer complete
usb-storage: Bulk status result = 0
usb-storage: Bulk Status S0x53425355T0x3R 0 Stat0x0
usb-storage: scsi cmd done, result=0x0
usb-storage: *** thread sleeping.
The original READ CAPACITY command worked okay.
Quoted 15 lines
usb-storage: queuecommand called
usb-storage: *** thread awakened.
usb-storage: CommandREAD_CAPACITY(10 bytes)
usb-storage: 25 00 00 03 d7 ff 00 00 01 00
usb-storage: Bulk Command S0x43425355T0x4L 8 F 128 Trg 0 LUN 0 CL 10
usb-storage:usb_stor_bulk_transfer_buf: xfer 31 bytes
usb-storage: Status code 0; transferred 31/31
usb-storage: -- transfer complete
usb-storage: Bulk command transfer result=0
usb-storage:usb_stor_bulk_transfer_buf: xfer 8 bytes
usb-storage:command_abortcalled
usb-storage:usb_stor_stop_transportcalled
usb-storage: -- cancelling URB
usb-storage: Status code -104; transferred 0/8
usb-storage: -- transfer cancelled
Quoted 8 lines
usb-storage: Bulk data transfer result
0x4
usb-storage: -- command was aborted
usb-storage:usb_stor_Bulk_resetcalled
usb-storage:usb_stor_control_msg: rq=ff rqtype=21 value=0000 index=00 len=0
usb-storage: Timeout -- cancelling URB
usb-storage: Soft reset failed: -104
usb-storage: scsi command aborted
usb-storage: *** thread sleeping.
The version with PMI set crashed the device. Not even a bus reset cleared the error condition (not shown above but it's in the original log). So this approach is unacceptable.
Alan Stern