cvs commit: src/sys/dev/ata atapi-cd.c atapi-cd.h
Scott Long
scottl at samsco.org
Fri Nov 16 09:12:14 PST 2007
Søren Schmidt wrote:
> Nate Lawson wrote:
>> Søren Schmidt wrote:
>>
>>> Scott Long wrote:
>>>
>>>> SXren Schmidt wrote:
>>>>
>>>>> sos 2007-10-26 08:59:24 UTC
>>>>>
>>>>> FreeBSD src repository
>>>>>
>>>>> Modified files:
>>>>> sys/dev/ata atapi-cd.c atapi-cd.h Log:
>>>>> Update the way we get the mode pages on probe.
>>>>> Revision Changes Path
>>>>> 1.194 +22 -25 src/sys/dev/ata/atapi-cd.c
>>>>> 1.47 +1 -0 src/sys/dev/ata/atapi-cd.h
>>>>>
>>>> Just curious, what was the motivation for changing from doing a
>>>> TUR to doing a MODE_SENSE in g_access? Your new code now relies
>>>> on what I'd consider is a fairly obscure feature of the SFF-8020i
>>>> spec, and one that contradicts the MMC and SPC specs that are now
>>>> used as the normative references for packet commands. There's at
>>>> least once case, the virtual CDROM emulator in Parallels, that
>>>> appears not to support this feature, and I'd bet pretty heavily
>>>> that there are a number of real devices that won't support it
>>>> either.
>>>>
>>>> Without reverting to the old TUR code, an easy way forward is to
>>>> not fail the g_access command for the MST_FMT_NONE case. This is
>>>> generally incorrect anyways as it just means that the device can't
>>>> specifically identify the media though it knows that the media is
>>>> inserted and valid. Since this constant evaluates to 0x00, ignoring
>>>> it will also allow devices that don't support it to still work. The
>>>> only side effect is that devices that don't support it will also not
>>>> be able to report MST_NO_DISC. These devices will get handled later
>>>> as a side effect of reporting a bogus media size.
>>>>
>>>> Ultimately, I do think that the code needs to go back to using a TUR
>>>> and interpreting sense, asc, and ascq codes correctly. The code prior
>>>> to 10/26 looks like it does this, so again I'm curious as to what ,
>>>> motivated the change.
>>>>
>>> The code is only intended to work around the verbose error chatter from
>>> GEOM as it will read from a nonexisting media (if the drive is empty)
>>> during boot, and clutter the console needlessly. There is currently no
>>> way to prevent this, but I've talked to phk about it lately so this can
>>> be left out alltogether.
>>> Anyhow the only failure I've seen so far is Parallels when using a CD
>>> image as a virtual CDROM drive, it does a poor HW emu in that case if
>>> you ask me :)
>>>
>>> Anyhow you are free to do what you want with the code until I get a real
>>> fix via GEOM done, but mind you the old code will not work on SATA ATAPI
>>> drives so a simple rollback of the commit is not really a fix...
>>>
>>
>> While there may be a way to solve this automatically for ATA, this is
>> also an issue for floppy drives. GEOM tries to read the floppy on boot
>> to see if there's a label, even if no media is present. I think GEOM
>> should have a way of asking drives if they can tell if they have media
>> present and not probe them if they can't. A separate env flag could be
>> set to say "always probe removable media" if users want the previous
>> behavior. For most of us, this just causes boot delay.
>>
> What I've sortof talked phk into is that if I return the "right" error
> code in the "start" function, it will back off and not retry nor chatter.
> We still need the "access" function to return OK if HW present or we
> cannot send ioctl calls to an empty drive.
>
IMHO, overloading g_start just adds more cruft to the problem. I'm torn
between saying that g_access should be extended to give more than just a
simple yes/no error return, and saying that g_access is fundamentally
flawed and that this kind of info should be relayed via GEOM attributes.
As for rolling back the change or not, I don't see anywhere in the
SFF-8020i spec where it says that the CAP_PAGE command is guaranteed to
complete successfully and not return a CHECKCOND. It seems perfectly
valid for it to fail if there is no media. But even disregarding that,
the current code is still intended return a failure to g_access if
there's no media; doesn't that still preclude you from being able to
send ioctls to the device?
Scott
More information about the cvs-src
mailing list