• Albert Lee's avatar
    [PATCH] libata: Prevent the interrupt handler from completing a command twice · 21b1ed74
    Albert Lee authored
    Problem:
       During the libata CD-ROM stress test, sometimes the "BUG: timeout
    without command" error is seen.
    
    Root cause:
      Unexpected interrupt occurs after the ata_qc_complete() is called,
    but before the SCSI error handler.  The interrupt handler is invoked
    before the SCSI error handler, and it clears the command by calling
    ata_qc_complete() again.  Later when the SCSI error handler is run,
    the ata_queued_cmd is already gone, causing the "BUG: timeout without
    command" error.
    
    Changes:
      - Use the ATA_QCFLAG_ACTIVE flag to prevent the interrupt handler
    from completing the command twice, before the scsi_error_handler.
    Signed-off-by: default avatarAlbert Lee <albertcc@tw.ibm.com>
    21b1ed74
libata-core.c 92.5 KB