Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2c3d2a46 authored by Albert Lee's avatar Albert Lee Committed by Jeff Garzik
Browse files

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: default avatarAlbert Lee <albertcc@tw.ibm.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent fa4453c4
Loading
Loading
Loading
Loading
+16 −6
Original line number Diff line number Diff line
@@ -1363,13 +1363,23 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
	 * schedule EH_REVALIDATE operation to update the IDENTIFY DEVICE
	 * cache
	 */
	if (ap->ops->error_handler &&
	    !need_sense && (qc->tf.command == ATA_CMD_SET_FEATURES) &&
	    ((qc->tf.feature == SETFEATURES_WC_ON) ||
	     (qc->tf.feature == SETFEATURES_WC_OFF))) {
	if (ap->ops->error_handler && !need_sense) {
		switch (qc->tf.command) {
		case ATA_CMD_SET_FEATURES:
			if ((qc->tf.feature == SETFEATURES_WC_ON) ||
			    (qc->tf.feature == SETFEATURES_WC_OFF)) {
				ap->eh_info.action |= ATA_EH_REVALIDATE;
				ata_port_schedule_eh(ap);
			}
			break;

		case ATA_CMD_INIT_DEV_PARAMS: /* CHS translation changed */
		case ATA_CMD_SET_MULTI: /* multi_count changed */
			ap->eh_info.action |= ATA_EH_REVALIDATE;
			ata_port_schedule_eh(ap);
			break;
		}
	}

	/* For ATA pass thru (SAT) commands, generate a sense block if
	 * user mandated it or if there's an error.  Note that if we
+1 −0
Original line number Diff line number Diff line
@@ -151,6 +151,7 @@ enum {
	ATA_CMD_WRITE_MULTI_EXT	= 0x39,
	ATA_CMD_WRITE_MULTI_FUA_EXT = 0xCE,
	ATA_CMD_SET_FEATURES	= 0xEF,
	ATA_CMD_SET_MULTI	= 0xC6,
	ATA_CMD_PACKET		= 0xA0,
	ATA_CMD_VERIFY		= 0x40,
	ATA_CMD_VERIFY_EXT	= 0x42,