#10043: usb_disk fails to handle USB stick, panic KDL when trying to boot from it -----------------------------------------------+--------------------------- Reporter: jua | Owner: mmlr Type: bug | Status: new Priority: normal | Milestone: R1 Component: Drivers/USB | Version: Keywords: usb_disk usb stick boot kdl panic | R1/Development Blocking: | Blocked By: Platform: x86 | Has a Patch: 0 -----------------------------------------------+--------------------------- The changes to usb_disk driver in hrev46099 broke booting an anyboot-image from one of my USB sticks for me. When the disk icon lights up in the boot splash, it shows a KDL "PANIC: could not mount boot device". (With a different USB stick it stills works fine...) Here's what I found out: The updated usb_disk driver wrongly detects the USB stick as read-only device (the `KPartition::Dump` printed to the serial console while booting shows the boot partition flags as 0xa... while with the usb_disk driver from hrev46098 it is the correct 0x2). This later leads to failed mounting. The problem has its roots in `usb_disk_device_added()`, in the part starting at line 795. For some reason, the problematic USB stick responds to the 'unit ready'-inquiry with ASC `0x2800`: "Not ready to ready change, medium may have changed" (maybe a device quirk?). In `scsi_sense.h` this is associated with `err_act_fail`, so it will drop out of the loop without retrying... `lun->write_protected` doesn't get set to `false` and it will then wrongly assume a read-only medium. As a test-hack, I overrode it by just setting `lun->write_protected` always to `true`. It then works, boots fine, without any further changes. A better fix would be to set the entry for `0x2800` in `sSCSISenseAscTable` to `err_act_retry`. This fixes the problem, it will retry the command on the stick and the second time it succeeds and can mount the boot volume. Attaching a patch which does this. I'm not sure whether this is the correct solution though. -- Ticket URL: <http://dev.haiku-os.org/ticket/10043> Haiku <http://dev.haiku-os.org> Haiku - the operating system.