This patch series attempts to clean up the SCSI error handling a bit. See comments in below TOC or patch emails. All of the below have been tested in success and error paths through the VERIFY_10 and ATA_16 commands using the AHCI driver.
IMPORTANT: the patchset below against libata-dev-2.6 relies on the recent AHCI driver fixes recently patched into libata-2.6. I am including the two specific patches as 1 and 2 of this series for completeness, although of course they should be merged from libata-2.6 instead. Therefore, you may ignore these two unless you want to test this series now on libata-dev. [ Start of patch descriptions ] 01_libata_garzik-ahci-tf-read.patch : AHCI tf_read() support (included in libata-2.6) This is Jeff's tf_read() support patch for AHCI. Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]> 02_libata_ahci-err-int.patch : AHCI error handling fix (included in libata-2.6) Fixes AHCI bits during handling of fatal error int. 03_libata_update_desc_code.patch : update ATA PT sense desc code Change the ATA pass through sense block descriptor code to 0x09 per SAT 04_libata_control_pg_desc_bit.patch : support descriptor sense in ctrl page libata must support the descriptor format sense blocks as they are required to properly report results of ATA pass through commands as well as other SCSI commands reporting 48b LBAs. This patch adjusts the control mode page to properly report this. 05_libata_split_ata_to_sense_error.patch : rework how CCs generated This patch fixes several bugs as well as reorganizes the way check conditions are generated. Bugs fixed: 1) in ata_scsi_qc_complete(), ATA_12/16 commands wouldn't call ata_pass_thru_cc() on error status; 2) ata_pass_thru_cc() wouldn't put the SK, ASC, and ASCQ from ata_to_sense_error() in the correct place in the sense block because ata_to_sense_error() was writing a fixed sense block. Per the recommendations in the comments, ata_to_sense_error() is now split into 3 parts. The existing fcn is only used for outputting a sense key/ASC/ASCQ triplicate. A new function ata_dump_status() was created to print the error info, similar to the ide variety. A third function ata_gen_fixed_sense() was created to generate a fixed length sense block. I added the use of the info field for 28b LBAs only. ata_pass_thru_cc() renamed to ata_gen_ata_desc_sense() to match naming convention, presumably to include another descriptor format function in the future (see question 2 below). Questions: 1) I made the ata_gen_..._sense() routines read the status register themselves rather than use the drv_stat values that used to be passed in? These values seemed unreliable/useless since they were often hard coded (see calls to ata_qc_complete() for origins of most drv_stat variables). Sound ok? 2) the SAT spec has little about error handling and sense information, sepcifically what descriptor format is valid for use by SAT commands. I want to use descriptor type 00 (information) in my next patch until a spec says differently. Sound ok? [ End of patch descriptions ] BR - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/