Patch "Revert "libata-eh: Set 'information' field for autosense"" has been added to the 4.1-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
Revert "libata-eh: Set 'information' field for autosense"
to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
revert-libata-eh-set-information-field-for-autosense.patch
and it can be found in the queue-4.1 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
fe16d4f202c59a560533a223bc6375739ee30944Mon Sep 17 00:00:00 2001
From: Tejun Heo <[email protected]>
Date: Mon, 3 Aug 2015 11:41:33 -0400
Subject: Revert "libata-eh: Set 'information' field for autosense"
From: Tejun Heo <[email protected]>
commit fe16d4f202c59a560533a223bc6375739ee30944 upstream.
This reverts commit a1524f226a02aa6edebd90ae0752e97cfd78b159.
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.
--- drivers/ata/libata-core.c | 4 ++-- drivers/ata/libata-eh.c | 3 --- drivers/ata/libata-scsi.c | 12 ------------ drivers/ata/libata.h | 5 +---- drivers/scsi/scsi_error.c | 31 ------------------------------- include/scsi/scsi_eh.h | 1 - 6 files changed, 3 insertions(+), 53 deletions(-)
drivers/ata/libata-core.c +2 -2
@@ -694,11 +694,11 @@ static int ata_rwcmd_protocol(struct ata* RETURNS: * Block address read from @tf. */ -u64 ata_tf_read_block (const struct ata_taskfile *tf,struct ata_device *dev) +u64 ata_tf_read_block (struct ata_taskfile *tf,struct ata_device *dev) {u64 block =0 ; -if (!dev || tf->flags &ATA_TFLAG_LBA ) { +if (tf->flags &ATA_TFLAG_LBA ) {if (tf->flags &ATA_TFLAG_LBA48 ) { block |= (u64 )tf->hob_lbah <<40 ; block |= (u64 )tf->hob_lbam <<32 ;
drivers/ata/libata-eh.c +0 -3
@@ -1864,7 +1864,6 @@ void ata_eh_analyze_ncq_error(struct ataata_dev_dbg (dev,"NCQ Autosense %02x/%02x/%02x\n" , sense_key, asc, ascq);ata_scsi_set_sense (qc->scsicmd, sense_key, asc, ascq); -ata_scsi_set_sense_information (qc->scsicmd, &qc->result_tf); qc->flags |=ATA_QCFLAG_SENSE_VALID ; }
@@ -1907,8 +1906,6 @@ static unsigned int ata_eh_analyze_tf(st tmp =ata_eh_request_sense (qc, qc->scsicmd);if (tmp) qc->err_mask |= tmp; -else -ata_scsi_set_sense_information (qc->scsicmd, tf); }else {ata_dev_warn (qc->dev,"sense data available but port frozen\n" ); }
drivers/ata/libata-scsi.c +0 -12
@@ -280,18 +280,6 @@ void ata_scsi_set_sense(struct scsi_cmndscsi_build_sense_buffer (0 , cmd->sense_buffer, sk, asc, ascq); } -void ata_scsi_set_sense_information (struct scsi_cmnd *cmd, -const struct ata_taskfile *tf) -{ -u64 information; - -if (!cmd) -return ; - - information =ata_tf_read_block (tf,NULL ); -scsi_set_sense_information (cmd->sense_buffer, information); -} -static ssize_t ata_scsi_em_message_store (struct device *dev,struct device_attribute *attr,const char *buf,size_t count)
drivers/ata/libata.h +1 -4
@@ -67,8 +67,7 @@ extern struct ata_queued_cmd *ata_qc_newextern int ata_build_rw_tf (struct ata_taskfile *tf,struct ata_device *dev,u64 block,u32 n_block,unsigned int tf_flags,unsigned int tag); -extern u64 ata_tf_read_block (const struct ata_taskfile *tf, -struct ata_device *dev); +extern u64 ata_tf_read_block (struct ata_taskfile *tf,struct ata_device *dev); extern unsigned ata_exec_internal(struct ata_device *dev, struct ata_taskfile *tf, const u8 *cdb, int dma_dir, void *buf, unsigned int buflen,
@@ -139,8 +138,6 @@ extern int ata_scsi_add_hosts(struct ataextern 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_set_sense_information (struct scsi_cmnd *cmd, -const struct ata_taskfile *tf);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);
drivers/scsi/scsi_error.c +0 -31
@@ -26,7 +26,6 @@#include <linux/blkdev.h> #include <linux/delay.h> #include <linux/jiffies.h> -#include <asm/unaligned.h> #include <scsi/scsi.h> #include <scsi/scsi_cmnd.h>
@@ -2587,33 +2586,3 @@ void scsi_build_sense_buffer(int desc, u } }EXPORT_SYMBOL (scsi_build_sense_buffer); - -/** -* scsi_set_sense_information - set the information field in a -* formatted sense data buffer -* @buf: Where to build sense data -* @info: 64-bit information value to be set -* -**/ -void scsi_set_sense_information (u8 *buf,u64 info) -{ -if ((buf[0 ] &0x7f ) ==0x72 ) { -u8 *ucp, len; - - len = buf[7 ]; - ucp = (char *)scsi_sense_desc_find (buf, len +8 ,0 ); -if (!ucp) { - buf[7 ] = len +0xa ; - ucp = buf +8 + len; - } - ucp[0 ] =0 ; - ucp[1 ] =0xa ; - ucp[2 ] =0x80 ;/* Valid bit */ - ucp[3 ] =0 ; -put_unaligned_be64 (info, &ucp[4 ]); - }else if ((buf[0 ] &0x7f ) ==0x70 ) { - buf[0 ] |=0x80 ; -put_unaligned_be64 (info, &buf[3 ]); - } -} -EXPORT_SYMBOL (scsi_set_sense_information);
include/scsi/scsi_eh.h +0 -1
@@ -59,7 +59,6 @@ extern int scsi_get_sense_info_fld(const u64 * info_out);extern void scsi_build_sense_buffer (int desc,u8 *buf,u8 key,u8 asc,u8 ascq); -extern void scsi_set_sense_information (u8 *buf,u64 info);extern int scsi_ioctl_reset (struct scsi_device *,int __user *);
Patches currently in stable-queue which might be from [email protected] are
queue-4.1/revert-libata-implement-ncq-autosense.patch queue-4.1/revert-libata-eh-set-information-field-for-autosense.patch queue-4.1/revert-libata-implement-support-for-sense-data-reporting.patch