> Everything works okay until I perform a read I/O to the media-error-causing > location. Immediately I get: > > aic94xx: escb_tasklet_complete: phy2: REQ_TASK_ABORT Interesting that you get REQ_TASK_ABORT for a media error... > But the I/O only returns to the SCSI layer after its full designated > timeout, instead of returning quickly with MEDIUM_ERROR. Yep. The abort function doesn't know how to tell libata to abort the command. I suppose the "proper" thing to do would be to modify sas_ata_task_done to check if the SAS_TASK_ABORTED or SAS_TASK_INITIATOR_ABORTED flags are set and send some sort of ATA error code back that would cause a retry. Though, I don't see why the sequencer sends back REQ_TASK_ABORT--presumably the drive generates some media error data that could be fed to libata. > After that particular I/O fails, every I/O to the driver will immediately > return as aborted. Unloading and loading the driver reverses the problem > but may crash the kernel not long after printing this: > > Nov 28 02:13:58 pro210 kernel: aic94xx: Uh-oh! Pending is not empty! > Nov 28 02:13:58 pro210 kernel: aic94xx: freeing from pending Yep. Side effect of above. I'll send you a patch later today when I get this sorted out. In any case, thank you for testing out the driver! :) --D - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html