ide-cd problem

From: Alan Chandler
Date: Sat Nov 20 2004 - 13:43:26 EST


I have been trying to track down why all attempts to burn a cd on my ide cdrw
fails (see bug #3741 on bugzilla ), with a subprocess of cdrecord ending up
hanging in uninterruptable sleep state.

I think I understand what is happening, I just don't know what to do about it.

Inside drivers/ide/ide-cd.c

the ide_do_rw_cdrom routine has been called via a request with the request
flags having the REQ_BLOCK_PC flag set. The request->data_len of this
request is set to 0.

This request is sent to the device and it generates interrupts to eventually
land it up inside the routine cdrom_newpc_intr.

At this point the status register on the hardware is set to 0x58 - implying, I
think that the DRQ_STAT bit is set and that something should be sent to the
device.

Normally, because the requested data_len is not zero, the data is sent. In
this case however, because the original request had nothing to send, the
while/if clauses to initiate a new transfer are skipped and the routine ends
up setting a new interrupt handler address and returning to await an
interrupt that will never come.

Question: should something validate that the request length is not zero
earlier, or should there be a check in ide-cd.c, or is it my hardware (its a
generic cd read/rewriter which announces itself as 'CW078D CD-R/RW')
--
Alan Chandler
alan@xxxxxxxxxxxxxxxxxxxxx
First they ignore you, then they laugh at you,
then they fight you, then you win. --Gandhi
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/