• Albert Lee's avatar
    [libata] PIO error handling improvement · 623b57b3
    Albert Lee authored
    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().
    
    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.
    Signed-off-by: default avatarAlbert Lee <albertcc@tw.ibm.com>
    623b57b3
libata-core.c 88.1 KB