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

Commit dde44589 authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik
Browse files

[PATCH] libata: implement ATA_FLAG_IN_EH port flag



ATA_FLAG_IN_EH flag is set on entry to EH and cleared on completion.
This patch just sets and clears the flag.  Following patches will
build normal qc execution / EH synchronization aroung this flag.

Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
parent 725b2805
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -735,6 +735,11 @@ int ata_scsi_error(struct Scsi_Host *host)

	DPRINTK("ENTER\n");

	spin_lock_irqsave(&ap->host_set->lock, flags);
	assert(!(ap->flags & ATA_FLAG_IN_EH));
	ap->flags |= ATA_FLAG_IN_EH;
	spin_unlock_irqrestore(&ap->host_set->lock, flags);

	ap = (struct ata_port *) &host->hostdata[0];
	ap->ops->eng_timeout(ap);

@@ -742,6 +747,10 @@ int ata_scsi_error(struct Scsi_Host *host)

	scsi_eh_flush_done_q(&ap->eh_done_q);

	spin_lock_irqsave(&ap->host_set->lock, flags);
	ap->flags &= ~ATA_FLAG_IN_EH;
	spin_unlock_irqrestore(&ap->host_set->lock, flags);

	DPRINTK("EXIT\n");
	return 0;
}
+2 −0
Original line number Diff line number Diff line
@@ -162,6 +162,8 @@ enum {
	ATA_FLAG_PIO_LBA48	= (1 << 13), /* Host DMA engine is LBA28 only */
	ATA_FLAG_IRQ_MASK	= (1 << 14), /* Mask IRQ in PIO xfers */

	ATA_FLAG_IN_EH		= (1 << 15), /* EH in progress */

	ATA_QCFLAG_ACTIVE	= (1 << 1), /* cmd not yet ack'd to scsi lyer */
	ATA_QCFLAG_SG		= (1 << 3), /* have s/g table? */
	ATA_QCFLAG_SINGLE	= (1 << 4), /* no s/g, just a single buffer */