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

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

libata-link: update ata_scsi_error() to handle PMP links



Update ata_scsi_error() to handle PMP links.  As error conditions can
occur on both host and PMP links, __ata_port_for_each_link() is used.

Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 8989805d
Loading
Loading
Loading
Loading
+9 −4
Original line number Original line Diff line number Diff line
@@ -363,6 +363,8 @@ void ata_scsi_error(struct Scsi_Host *host)
 repeat:
 repeat:
	/* invoke error handler */
	/* invoke error handler */
	if (ap->ops->error_handler) {
	if (ap->ops->error_handler) {
		struct ata_link *link;

		/* kill fast drain timer */
		/* kill fast drain timer */
		del_timer_sync(&ap->fastdrain_timer);
		del_timer_sync(&ap->fastdrain_timer);


@@ -372,9 +374,11 @@ void ata_scsi_error(struct Scsi_Host *host)
		/* fetch & clear EH info */
		/* fetch & clear EH info */
		spin_lock_irqsave(ap->lock, flags);
		spin_lock_irqsave(ap->lock, flags);


		memset(&ap->link.eh_context, 0, sizeof(ap->link.eh_context));
		__ata_port_for_each_link(link, ap) {
		ap->link.eh_context.i = ap->link.eh_info;
			memset(&link->eh_context, 0, sizeof(link->eh_context));
		memset(&ap->link.eh_info, 0, sizeof(ap->link.eh_info));
			link->eh_context.i = link->eh_info;
			memset(&link->eh_info, 0, sizeof(link->eh_info));
		}


		ap->pflags |= ATA_PFLAG_EH_IN_PROGRESS;
		ap->pflags |= ATA_PFLAG_EH_IN_PROGRESS;
		ap->pflags &= ~ATA_PFLAG_EH_PENDING;
		ap->pflags &= ~ATA_PFLAG_EH_PENDING;
@@ -410,7 +414,8 @@ void ata_scsi_error(struct Scsi_Host *host)
		}
		}


		/* this run is complete, make sure EH info is clear */
		/* this run is complete, make sure EH info is clear */
		memset(&ap->link.eh_info, 0, sizeof(ap->link.eh_info));
		__ata_port_for_each_link(link, ap)
			memset(&link->eh_info, 0, sizeof(link->eh_info));


		/* Clear host_eh_scheduled while holding ap->lock such
		/* Clear host_eh_scheduled while holding ap->lock such
		 * that if exception occurs after this point but
		 * that if exception occurs after this point but