Hi,..
On Wednesday 14 November 2007, Mark Lord wrote:Sebastian Kemper wrote:Hi Mark!..
On Wed, Nov 14, 2007 at 11:41:37AM -0500, Mark Lord wrote:Ahh.. got it. The host_status returned (not checked by that code) was 7,I don't understand. You seem to use a cmd_len of 16 in hdparm yourself.
which means "host error".
In this case, that's because the cmd_len is (16), which is too large for ATAPI.
It needs to be changed to (12) instead.
Really? Where?
And why does it work with the "old" ATA driver and not with libata if..
16 is too large for ATAPI in general?
Now that *is* the question.
And the answer appears to be that ide-cd.c ignores the passed-in cmd_len,
and replaces it with:
cmd_len = COMMAND_SIZE(rq->cmd[0]);
That's a SCSI macro to calculate the correct cmd_len based on the SCSI opcode,
which is very appropriate here. We should do that too (we don't) in libata.
But not exactly as IDE does it -- that's actually a bug: the code needs to also
check that the new cmd_len is no larger than the original, or we'll get an Oops.
I'll cook up a patch for that shortly and try it before posting it here.
Could you please also fix ide-cd while at it?