FAILED: patch "[PATCH] Revert "libata: Implement NCQ autosense"" failed to apply to 4.1-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
74a80d67b8316eb3fbeb73dafc060a5a0a708587Mon Sep 17 00:00:00 2001
From: Tejun Heo <[email protected]>
Date: Mon, 3 Aug 2015 11:46:39 -0400
Subject: [PATCH] Revert "libata: Implement NCQ autosense"
This reverts commit 42b966fbf35da9c87f08d98f9b8978edf9e717cf.
As implemented, ACS-4 sense reporting for ATA devices bypasses error diagnosis and handling in libata degrading EH behavior significantly. Revert the related changes for now.
Signed-off-by Tejun Heo <[email protected]>
Cc Hannes Reinecke <[email protected]>
Cc [email protected] #v4.1+
drivers/ata/libata-eh.c +0 -18
@@ -1592,8 +1592,6 @@ static int ata_eh_read_log_10h(struct ata_device *dev, tf->hob_lbah = buf[10 ]; tf->nsect = buf[12 ]; tf->hob_nsect = buf[13 ]; -if (ata_id_has_ncq_autosense (dev->id)) - tf->auxiliary = buf[14 ] <<16 | buf[15 ] <<8 | buf[16 ];return 0 ; }
@@ -1791,18 +1789,6 @@ void ata_eh_analyze_ncq_error(struct ata_link *link)memcpy (&qc->result_tf, &tf,sizeof (tf)); qc->result_tf.flags =ATA_TFLAG_ISADDR |ATA_TFLAG_LBA |ATA_TFLAG_LBA48 ; qc->err_mask |=AC_ERR_DEV |AC_ERR_NCQ ; -if (qc->result_tf.auxiliary) { -char sense_key, asc, ascq; - - sense_key = (qc->result_tf.auxiliary >>16 ) &0xff ; - asc = (qc->result_tf.auxiliary >>8 ) &0xff ; - ascq = qc->result_tf.auxiliary &0xff ; -ata_dev_dbg (dev,"NCQ Autosense %02x/%02x/%02x\n" , - sense_key, asc, ascq); -ata_scsi_set_sense (qc->scsicmd, sense_key, asc, ascq); - qc->flags |=ATA_QCFLAG_SENSE_VALID ; - } - ehc->i.err_mask &= ~AC_ERR_DEV ; }
@@ -1832,10 +1818,6 @@ static unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc,return ATA_EH_RESET ; } -/* Set by NCQ autosense */ -if (qc->flags &ATA_QCFLAG_SENSE_VALID ) -return 0 ; -if (stat & (ATA_ERR |ATA_DF )) qc->err_mask |=AC_ERR_DEV ;else
drivers/ata/libata-scsi.c +2 -7
@@ -270,11 +270,8 @@ DEVICE_ATTR(unload_heads, S_IRUGO | S_IWUSR, ata_scsi_park_show, ata_scsi_park_store);EXPORT_SYMBOL_GPL (dev_attr_unload_heads); -void ata_scsi_set_sense (struct scsi_cmnd *cmd,u8 sk,u8 asc,u8 ascq) +static void ata_scsi_set_sense (struct scsi_cmnd *cmd,u8 sk,u8 asc,u8 ascq) { -if (!cmd) -return ; - cmd->result = (DRIVER_SENSE <<24 ) |SAM_STAT_CHECK_CONDITION ;scsi_build_sense_buffer (0 , cmd->sense_buffer, sk, asc, ascq);
@@ -1780,9 +1777,7 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc) ((cdb[2] & 0x20) || need_sense)) { ata_gen_passthru_sense(qc); } else { -if (qc->flags &ATA_QCFLAG_SENSE_VALID ) { - cmd->result =SAM_STAT_CHECK_CONDITION ; - }else if (!need_sense) { +if (!need_sense) { cmd->result =SAM_STAT_GOOD ; }else {/* TODO: decide which descriptor format to use
drivers/ata/libata.h +0 -1
@@ -137,7 +137,6 @@ extern int ata_scsi_add_hosts(struct ata_host *host, struct scsi_host_template *sht);extern void ata_scsi_scan_host (struct ata_port *ap,int sync);extern int ata_scsi_offline_dev (struct ata_device *dev); -extern void ata_scsi_set_sense (struct scsi_cmnd *cmd,u8 sk,u8 asc,u8 ascq);extern void ata_scsi_media_change_notify (struct ata_device *dev);extern void ata_scsi_hotplug (struct work_struct *work);extern void ata_schedule_scsi_eh (struct Scsi_Host *shost);
include/linux/ata.h +0 -2
@@ -528,8 +528,6 @@ struct ata_bmdma_prd {#define ata_id_cdb_intr (id) (((id)[ATA_ID_CONFIG] & 0x60) == 0x20)#define ata_id_has_da (id) ((id)[ATA_ID_SATA_CAPABILITY_2] & (1 << 4))#define ata_id_has_devslp (id) ((id)[ATA_ID_FEATURE_SUPP] & (1 << 8)) -#define ata_id_has_ncq_autosense (id) \ - ((id)[ATA_ID_FEATURE_SUPP] & (1 << 7))static inline bool ata_id_has_hipm (const u16 *id) {