Re: [PATCH 2/3] libata - PIO error handling fix
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Date: 2004-12-17 19:42:49
On Wed, 15 Dec 2004 17:50:59 +0800, Albert Lee [off-list ref] wrote:
Hi, Jeff: Tested burning CD-RW with libata-dev-2.6 and cdrecord: 1. ATAPI DMA mode - tested OK 2. ATAPI PIO mode - test failed when cdrecord finishes burning and issues MODE_SELECT to the device. After checking the log, it showed that MODE_SELECT caused ata_pio_complete() to return error. However, the error is not handled by ata_pio_task(). Attached please find the patch for ata_pio_task() error handling for your review. (The patch is against the libata-dev-2.6 tree. ) Changes in the patch: 1. End the PIO task when PIO_ST_IDLE state is entered 2. End the PIO task after PIO_ST_TMOUT and PIO_ST_ERR state handled by ata_pio_error() 3. Remove the first "if" statement to handle the error condition returned from ata_pio_block(), ata_pio_complete() and ata_pio_poll().
Jeff, 3. is the same issue + fix that was reported earlier by Tim. It seems that we have both somehow forgot about it. :-|
Change #2 is not so necessary since ata_pio_error() will put the cmd to PIO_ST_IDLE state after the error condition is handled. The change just saves a function call to queue_work(). Tested OK on on my machine with pdc20275 and ASUS CD-RW drive.
Patch looks fine for me. Bartlomiej