aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-05-15 06:29:22 -0400
committerJeff Garzik <jeff@garzik.org>2007-05-16 01:18:31 -0400
commit13b8d09f5de0aaa3153bbccc98baf247387823dc (patch)
treed35c90bd2460d7808595917ccf7c102229353365 /drivers/ata
parentda071b42f73dabbd0daf7ea4c3ff157d53b00648 (diff)
libata: track spindown status and skip spindown_compat if possible
Our assumption that most distros issue STANDBYNOW seems wrong. The upstream sysvinit and thus many distros including gentoo and opensuse don't take any action for libata disks on spindown. We can skip compat handling for these distros so that they don't need to update anything to take advantage of kernel-side shutdown. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/libata-scsi.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 07b5a3d4ed21..b6a1de8fad5b 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -967,6 +967,7 @@ static unsigned int ata_scsi_start_stop_xlat(struct ata_queued_cmd *qc)
967 * for more info. 967 * for more info.
968 */ 968 */
969 if (ata_spindown_compat && 969 if (ata_spindown_compat &&
970 (qc->dev->flags & ATA_DFLAG_SPUNDOWN) &&
970 (system_state == SYSTEM_HALT || 971 (system_state == SYSTEM_HALT ||
971 system_state == SYSTEM_POWER_OFF)) { 972 system_state == SYSTEM_POWER_OFF)) {
972 static unsigned long warned = 0; 973 static unsigned long warned = 0;
@@ -1394,6 +1395,14 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
1394 } 1395 }
1395 } 1396 }
1396 1397
1398 /* XXX: track spindown state for spindown_compat */
1399 if (unlikely(qc->tf.command == ATA_CMD_STANDBY ||
1400 qc->tf.command == ATA_CMD_STANDBYNOW1))
1401 qc->dev->flags |= ATA_DFLAG_SPUNDOWN;
1402 else if (likely(system_state != SYSTEM_HALT &&
1403 system_state != SYSTEM_POWER_OFF))
1404 qc->dev->flags &= ~ATA_DFLAG_SPUNDOWN;
1405
1397 if (need_sense && !ap->ops->error_handler) 1406 if (need_sense && !ap->ops->error_handler)
1398 ata_dump_status(ap->print_id, &qc->result_tf); 1407 ata_dump_status(ap->print_id, &qc->result_tf);
1399 1408