Message ID | 04ad6fca8105259a952c5d7c9ec5c5c0c52e6266.1384030893.git.psusi@ubuntu.com |
---|---|
State | Not Applicable |
Delegated to: | David Miller |
Headers | show |
Hello. On 10-11-2013 1:03, Phillip Susi wrote: > When a disk is in SLEEP mode it can not respond to commands, > including the CHECK POWER command. Instead of waking up the > sleeping disk, fake the reply to the CHECK POWER command to > indicate the disk is in standby mode. This prevents udisks > from waking up sleeping disks when it polls to see if they > are awake or not before trying to read their smart status. > --- > drivers/ata/libata-core.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c > index 83b1a9f..686c441 100644 > --- a/drivers/ata/libata-core.c > +++ b/drivers/ata/libata-core.c > @@ -5084,6 +5084,14 @@ void ata_qc_issue(struct ata_queued_cmd *qc) > > /* if device is sleeping, schedule reset and abort the link */ > if (unlikely(qc->dev->flags & ATA_DFLAG_SLEEPING)) { > + if (unlikely(qc->tf.command == ATA_CMD_CHK_POWER)) > + { Keep { on the same line as *if* please. WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 83b1a9f..686c441 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -5084,6 +5084,14 @@ void ata_qc_issue(struct ata_queued_cmd *qc) /* if device is sleeping, schedule reset and abort the link */ if (unlikely(qc->dev->flags & ATA_DFLAG_SLEEPING)) { + if (unlikely(qc->tf.command == ATA_CMD_CHK_POWER)) + { + /* fake reply to avoid waking drive */ + qc->flags &= ~ATA_QCFLAG_RESULT_TF; + qc->result_tf.nsect = 0; + ata_qc_complete(qc); + return; + } link->eh_info.action |= ATA_EH_RESET; ata_ehi_push_desc(&link->eh_info, "waking up from sleep"); ata_link_abort(link);