aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/libata-scsi.c
diff options
context:
space:
mode:
authorAlbert Lee <albertcc@tw.ibm.com>2007-06-07 04:01:17 -0400
committerJeff Garzik <jeff@garzik.org>2007-06-09 23:08:12 -0400
commit2c3d2a46f1ccf591850b20f4fdde12bcf2bf3dfd (patch)
tree148a2cd32ae40185bb547cb96cd17bcd920b8ab0 /drivers/ata/libata-scsi.c
parentfa4453c4c94a61bbefe470b16ddbb6218481c6dc (diff)
libata passthru: update cached device paramters
INIT_DEV_PARAMS and SET_MULTI_MODE change the device parameters cached by libata. Re-read IDENTIFY DEVICE info and update the cached device paramters when seeing these commands. Signed-off-by: Albert Lee <albertcc@tw.ibm.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata/libata-scsi.c')
-rw-r--r--drivers/ata/libata-scsi.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 884f52f43f8f..c228df298bd8 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -1363,12 +1363,22 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
1363 * schedule EH_REVALIDATE operation to update the IDENTIFY DEVICE 1363 * schedule EH_REVALIDATE operation to update the IDENTIFY DEVICE
1364 * cache 1364 * cache
1365 */ 1365 */
1366 if (ap->ops->error_handler && 1366 if (ap->ops->error_handler && !need_sense) {
1367 !need_sense && (qc->tf.command == ATA_CMD_SET_FEATURES) && 1367 switch (qc->tf.command) {
1368 ((qc->tf.feature == SETFEATURES_WC_ON) || 1368 case ATA_CMD_SET_FEATURES:
1369 (qc->tf.feature == SETFEATURES_WC_OFF))) { 1369 if ((qc->tf.feature == SETFEATURES_WC_ON) ||
1370 ap->eh_info.action |= ATA_EH_REVALIDATE; 1370 (qc->tf.feature == SETFEATURES_WC_OFF)) {
1371 ata_port_schedule_eh(ap); 1371 ap->eh_info.action |= ATA_EH_REVALIDATE;
1372 ata_port_schedule_eh(ap);
1373 }
1374 break;
1375
1376 case ATA_CMD_INIT_DEV_PARAMS: /* CHS translation changed */
1377 case ATA_CMD_SET_MULTI: /* multi_count changed */
1378 ap->eh_info.action |= ATA_EH_REVALIDATE;
1379 ata_port_schedule_eh(ap);
1380 break;
1381 }
1372 } 1382 }
1373 1383
1374 /* For ATA pass thru (SAT) commands, generate a sense block if 1384 /* For ATA pass thru (SAT) commands, generate a sense block if