diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 8ec81ca..de6e734 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -1759,6 +1759,27 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
 	ata_qc_free(qc);
 }
 
+static void ata_flush_qc_complete(struct ata_queued_cmd *qc)
+{
+	if (qc->err_mask) {
+		ata_gen_ata_sense(qc);
+		qc->scsidone(qc->scsicmd);
+		ata_qc_free(qc);
+	} else {
+		qc->complete_fn = ata_scsi_qc_complete;
+		qc->tf.command = ATA_CMD_STANDBYNOW1;
+		ata_qc_issue(qc);
+	}
+}
+
+static void ata_qc_issue_flush(struct ata_queued_cmd *qc)
+{
+	qc->complete_fn = ata_flush_qc_complete;
+	qc->tf.command = qc->dev->flags & ATA_DFLAG_FLUSH_EXT ?
+				ATA_CMD_FLUSH_EXT : ATA_CMD_FLUSH;
+	ata_qc_issue(qc);
+}
+
 /**
  *	ata_scsi_translate - Translate then issue SCSI command to ATA device
  *	@dev: ATA device to which the command is addressed
@@ -1821,8 +1842,15 @@ static int ata_scsi_translate(struct ata_device *dev, struct scsi_cmnd *cmd,
 			goto defer;
 	}
 
-	/* select device, send command to hardware */
-	ata_qc_issue(qc);
+	/*
+	 * If we received scsi stop command,
+	 * we will need to flush cache first
+	 */
+	if (qc->tf.command == ATA_CMD_STANDBYNOW1 && ata_try_flush_cache(dev))
+		ata_qc_issue_flush(qc);
+	else
+		/* select device, send command to hardware */
+		ata_qc_issue(qc);
 
 	VPRINTK("EXIT\n");
 	return 0;
