Discussion:
[9fans] usb cdrom
(too old to reply)
erik quanstrom
2013-02-12 15:39:09 UTC
Permalink
the intersting bit is right at the end
where two request sense commands are sent back-to-back
and the second one returns all good (since request sense
clears sense information).

this same disk works fine on a sata cdrom. so either
- this cdrom does something cdfs can't handle, or
- usb/disk is doing something cdfs can't handle.

as a guess, it looks like usb/disk errored out 0xa8 (read 12) before it
was sent.

- erik

harness# /sys/src/cmd/usb/usbd/6.out
ehci 0xfffffe00fe83bc00: port 2 didn't reset within 500 ms; sts 0x1101
vendor is BUFFALO
usb/disk... disk: cmd: tag 0x1: 12 00 00 00 ff 00 datalen: 255
disk: data: 96 bytes
disk: status: 00 residue: 159
disk: cmd: tag 0x2: 1b 00 00 00 01 00 datalen: 0
disk: status: 01 residue: 0
disk: cmd: tag 0x3: 03 00 00 00 ff 00 datalen: 255
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 02 00 00 00 00 0a 00 00 00 00 3a 00 00 00 00 00 00 00
usb/disk: : 023a00 medium not present
disk: cmd: tag 0x4: 1b 00 00 00 03 00 datalen: 0
disk: status: 01 residue: 0
disk: cmd: tag 0x5: 03 00 00 00 ff 00 datalen: 255
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00
usb/disk: : 052400 invalid field in cdb
disk: cmd: tag 0x6: 25 00 00 00 00 00 00 00 00 00 datalen: 8
disk: data: 0 bytes
disk: status: 01 residue: 8
disk: cmd: tag 0x7: 03 00 00 00 ff 00 datalen: 255
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 02 00 00 00 00 0a 00 00 00 00 3a 02 00 00 00 00 00 00
usb/disk: : 023a02 medium not present - tray open
disk: cmd: tag 0x8: 25 00 00 00 00 00 00 00 00 00 datalen: 8
disk: data: 0 bytes
disk: status: 01 residue: 8
disk: cmd: tag 0x9: 03 00 00 00 ff 00 datalen: 255
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 02 00 00 00 00 0a 00 00 00 00 3a 02 00 00 00 00 00 00
usb/disk: : 023a02 medium not present - tray open
harness#
harness#
harness#
harness#
harness# cat /dev/sdU0.0/ctl
disk: cmd: tag 0x12: 25 00 00 00 00 00 00 00 00 00 datalen: 8
disk: data: 0 bytes
disk: status: 01 residue: 8
disk: cmd: tag 0x13: 03 00 00 00 ff 00 datalen: 255
disk: data: 20 bytes
disk: status: 00sidue: 235
sense data: 70 00 06 00 00 00 00 0a 00 00 00 00 28 00 00 00 00 00 00 00
usb/disk: sdU0.0: 062800 not ready to ready change, medium may have changed
disk: cmd: tag 0x14: 25 00 00 00 00 00 00 00 00 00 datalen: 8
disk: data: 8 bytes
disk: status: 00 residue: 0
disk: logical block size 2048, # blocks 0
inquiry /dev/usb/ep6.0 lun 0: Optiarc DVD RW AD-7560S SB01 Mar30,2009
harness#
harness#
harness#
harness#
harness# 9fs dump
harness# /n/dump/2013/0101/amd64/bin/cdfs -d /dev/sdU0.0
disk: cmd: tag 0x15: 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
disk: cmd: tag 0x16: 52 05 00 00 00 01 00 00 ff 00 datalen: 255
disk: data: 28 bytes
disk: status: 00 residue: 227
disk: cmd: tag 0x17: 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
disk: cmd: tag 0x18: 12 00 00 00 ff 00 datalen: 255 inquiry
disk: data: 96 bytes
disk: status: 00 residue: 159
disk: cmd: tag 0x19: 1b 00 00 00 01 00 datalen: 0 start
disk: status: 00 residue: 0
disk: cmd: tag 0x1a: 5a 00 2a 00 00 00 00 00 ff 00 datalen: 512 mode sense 10
disk: data: 76 bytes
disk: status: 00 residue: 436
disk: cmd: tag 0x1b: 5a 00 05 00 00 00 00 00 ff 00 datalen: 512 mode sense 10
disk: data: 60 bytes
disk: status: 00 residue: 452
disk: cmd: tag 0x1c: 5a 00 2a 00 00 00 00 00 ff 00 datalen: 512 mode sense 10
disk: data: 76 bytes
disk: status: 00 residue: 436
disk: cmd: tag 0x1d: 5a 00 08 00 00 00 00 00 ff 00 datalen: 512 mode sense 10
disk: data: 20 bytes
disk: status: 00 residue: 492
disk: cmd: tag 0x1e: 55 10 00 00 00 00 00 00 14 00 datalen: 20 mode select 10
disk: data: 20 bytes
disk: status: 00 residue: 492
disk: cmd: tag 0x1f: 25 00 00 00 00 00 00 00 00 00 datalen: 8 read capacity
disk: data: 8 bytes
disk: status: 00 residue: 0
disk: logical block size 2048, # blocks 0
disk: cmd: tag 0x20: 03 00 00 00 ff 00 datalen: 255 request sense
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00
disk: cmd: tag 0x21: 00 00 00 00 00 00 datalen: 0 ready
disk: status: 00 residue: 0
disk: cmd: tag 0x22: 55 10 00 00 00 00 00 00 14 00 datalen: 20 mode select 10
disk: data: 20 bytes
disk: status: 00 residue: 0
disk: cmd: tag 0x23: 43 00 00 00 00 00 00 04 00 00 datalen: 1024 read toc data
disk: data: 0 bytes
disk: status: 01 residue: 1024
disk: cmd: tag 0x24: 03 00 00 00 ff 00 datalen: 255
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00 invalid field in cdb
disk: cmd: tag 0x25: 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
disk: cmd: tag 0x26: 43 00 00 00 00 00 00 04 00 00 datalen: 1024
disk: data: 0 bytes
disk: status: 01 residue: 1024
disk: cmd: tag 0x27: 03 00 00 00 ff 00 datalen: 255
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00
disk: cmd: tag 0x28: 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
disk: cmd: tag 0x29: 52 05 00 00 00 01 00 00 ff 00 datalen: 255 read track info
disk: data: 28 bytes
disk: status: 00 residue: 227
disk: cmd: tag 0x2a: 43 02 00 00 00 00 00 04 00 00 datalen: 1024 read toc data
disk: data: 0 bytes
disk: status: 01 residue: 1024
disk: cmd: tag 0x2b: 03 00 00 00 ff 00 datalen: 255 request sense
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00 invalid field in cdb
disk: cmd: tag 0x2c: 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
disk: cmd: tag 0x2d: 43 02 00 00 00 00 00 04 00 00 datalen: 1024
disk: data: 0 bytes
disk: status: 01 residue: 1024
disk: cmd: tag 0x2e: 03 00 00 00 ff 00 datalen: 255
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00 invalid field in cdb
disk: cmd: tag 0x2f: 00 00 00 00 00 00 datalen: 0 ready
disk: status: 00 residue: 0
disk: cmd: tag 0x30: 51 00 00 00 00 00 00 04 00 00 datalen: 1024 read disk info
disk: data: 36 bytes
disk: status: 00 residue: 988
disk: cmd: tag 0x31: 03 00 00 00 ff 00 datalen: 255 request sense
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 all good
disk: cmd: tag 0x32: 00 00 00 00 00 00 datalen: 0 ready
disk: status: 00 residue: 0
disk: cmd: tag 0x33: 03 00 00 00 ff 00 datalen: 255 request sense
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 all good
disk: cmd: tag 0x34: 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
disk: cmd: tag 0x35: 46 00 00 01 00 00 00 08 00 00 datalen: 2048 get configuration
disk: data: 312 bytes
disk: status: 00 residue: 1736
disk: cmd: tag 0x36: 03 00 00 00 00 datalen: 255 request sense
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 all good
disk: cmd: tag 0x37: 00 00 00 00 00 00 datalen: 0 ready
disk: status: 00 residue: 0
disk: cmd: tag 0x38: 03 00 00 00 ff 00 datalen: 255 request sense
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 all good
disk: cmd: tag 0x39: 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
disk: cmd: tag 0x3a: 52 01 00 00 00 01 00 00 ff 00 datalen: 255 read track info
disk: data: 28 bytes
disk: status: 00 residue: 227
disk: cmd: tag 0x3b: 52 01 00 00 00 02 00 00 ff 00 datalen: 255 read track info
disk: data: 28 bytes
disk: status: 00 residue: 227
nwa is 218419 but invis track starts blk 0
disk: cmd: tag 0x3c: 43 00 00 00 00 00 00 04 00 00 datalen: 1024 read toc
disk: data: 0 bytes
disk: status: 01 residue: 1024
disk: cmd: tag 0x3d: 03 00 00 00 ff 00 datalen: 255 request sense
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00 invalid field in cdb
disk: cmd: tag 0x3e: 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
disk: cmd: tag 0x3f: 43 00 00 00 00 00 00 04 00 00 datalen: 1024
disk: data: 0 bytes
disk: status: 01 residue: 1024
disk: cmd: tag 0x40: 03 00 00 00 ff 00 datalen: 255
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00 invalid field in cdb
disk: cmd: tag 0x41: 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
harness#
harness#
harness#
harness#
harness#
harness#
harness#
harness#
harness#
harness#
harness#
harness#
harness# cat /mnt/cd/d000>/dev/null
disk: cmd: tag 0x42: 43 00 00 00 00 00 00 04 00 00 datalen: 1024 read toc
disk: data: 0 bytes
disk: status: 01 residue: 1024
disk: cmd: tag 0x43: 03 00 00 00 ff 00 datalen: 255
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00
disk: cmd: tag 0x 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
disk: cmd: tag 0x45: 43 00 00 00 00 00 00 04 00 00 datalen: 1024
disk: data: 0 bytes
disk: status: 01 residue: 1024
disk: cmd: tag 0x46: 03 00 00 00 ff 00 datalen: 255
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00
disk: cmd: tag 0x47: 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
disk: cmd: tag 0x48: 43 00 00 00 00 00 00 04 00 00 datalen: 1024 read toc
disk: data: 0 bytes
disk: status: 01 residue: 1024
disk: cmd: tag 0x49: 03 00 00 00 ff 00 datalen: 255 request sense
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00
disk: cmd: tag 0x4a: 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
disk: cmd: tag 0x4b: 43 00 00 00 00 00 00 04 00 00 datalen: 1024 read toc
disk: data: 0 bytes
disk: status: 01 residue: 1024
disk: cmd: tag 0x4c: 03 00 00 00 ff 00 datalen: 255 request sense
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00 invalid field in cdb
disk: cmd: tag 0x4d: 00 00 00 00 00 00 datalen: 0 ready
disk: status: 00 residue: 0
disk: cmd: tag 0x4e: 03 00 00 00 ff 00 datalen: 255 request sense
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 all good
disk: cmd: tag 0x4f: 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
disk: cmd: tag 0x50: 03 00 00 00 ff 00 datalen: 255 request sense
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 all good
disk: cmd: tag 0x51: 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
cat: error reading /mnt/cd/d000: cmd #a8: no additional sense information
disk: cmd: tag 0x52: 43 00 00 00 00 00 00 04 00 00 datalen: 1024 read toc
disk: data: 0 bytes
disk: status: 01 residue: 1024
disk: cmd: tag 0x53: 03 00 00 00 ff 00 datalen: 255
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00
disk: cmd: tag 0x54: 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
disk: cmd: tag 0x55: 43 00 00 00 00 00 00 04 00 00 datalen: 1024 read toc
disk: data: 0 bytes
disk: status: 01 residue: 1024
disk: cmd: tag 0x56: 03 00 00 00 ff 00 datalen: 255
disk: data: 20 bytes
disk: status: 00 residue: 235
sense data: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00 invalid field in cdb
disk: cmd: tag 0x57: 00 00 00 00 00 00 datalen: 0
disk: status: 00 residue: 0
harness#
harness#
harness#
harness# echo $status
cat 159: error reading /mnt/cd/d000: cmd #a8: no additional sense information
erik quanstrom
2013-02-13 05:09:57 UTC
Permalink
well that was simple, cdroms use 12-byte commands.
i thought somebody had used a usb cdrom before. :-)

- erik

; diffy -c disk.c
/n/dump/2013/0212/sys/src/cmd/usb/disk/disk.c:533,539 - disk.c:533,539
}
switch(lun->phase){
case Pcmd:
- if(count != 6 && count != 10){
+ if(count != 6 && count != 10 && count != 12 && count != 16){
qunlock(ums);
werrstr("bad command length");
return -1;
; diffy -c ums.h
/n/dump/2013/0212/sys/src/cmd/usb/disk/ums.h:51,57 - ums.h:51,57
ScsiReq;
uvlong blocks;
vlong capacity;
- uchar rawcmd[10];
+ uchar rawcmd[16];
uchar phase;
char *inq;
Ums *ums;
Richard Miller
2013-02-13 09:47:27 UTC
Permalink
Post by erik quanstrom
well that was simple, cdroms use 12-byte commands.
i thought somebody had used a usb cdrom before. :-)
I think some usb cd devices might just pretend to be disks.

When I wrote the original usb mass storage driver (ca 2005) I had
only flash drives in mind. Others have extended and rewritten it
many times since, to handle more varied and variously cranky devices,
but that original hidden assumption has been lurking ever since,
waiting to bite you... sorry.
erik quanstrom
2013-02-13 17:18:21 UTC
Permalink
Post by Richard Miller
Post by erik quanstrom
well that was simple, cdroms use 12-byte commands.
i thought somebody had used a usb cdrom before. :-)
I think some usb cd devices might just pretend to be disks.
When I wrote the original usb mass storage driver (ca 2005) I had
only flash drives in mind. Others have extended and rewritten it
many times since, to handle more varied and variously cranky devices,
but that original hidden assumption has been lurking ever since,
waiting to bite you... sorry.
oh, no problems. it was just such a surprise. :-)
and on the plus side it is nice to know that a problem
is fixed.

- erik

Loading...