Patch "scsi: libsas: Add sas_ata_device_link_abort()" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    scsi: libsas: Add sas_ata_device_link_abort()

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     scsi-libsas-add-sas_ata_device_link_abort.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 7df6c33f7e6ca0c543280f4ef2f7e69137b3a0f9
Author: John Garry <john.garry@xxxxxxxxxx>
Date:   Mon Oct 17 17:20:28 2022 +0800

    scsi: libsas: Add sas_ata_device_link_abort()
    
    [ Upstream commit 44112922674b94a7d699dfff6307fc830018df7c ]
    
    Similar to how AHCI handles NCQ errors in ahci_error_intr() ->
    ata_port_abort() -> ata_do_link_abort(), add an NCQ error handler for LLDDs
    to call to initiate a link abort.
    
    This will mark all outstanding QCs as failed and kick-off EH.
    
    Note:
    
    A "force reset" argument is added for drivers which require the ATA error
    handling to always reset the device.
    
    A driver may require this feature for when SATA device per-SCSI cmnd
    resources are only released during reset for ATA EH. As such, we need an
    option to force reset to be done, regardless of what any EH autopsy
    decides.
    
    The SATA device FIS fields are set to indicate a device error from
    ata_eh_analyze_tf().
    
    Suggested-by: Damien Le Moal <damien.lemoal@xxxxxxxxxxxxxxxxxx>
    Suggested-by: Niklas Cassel <niklas.cassel@xxxxxxx>
    Signed-off-by: John Garry <john.garry@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/1665998435-199946-2-git-send-email-john.garry@xxxxxxxxxx
    Tested-by: Damien Le Moal <damien.lemoal@xxxxxxxxxxxxxxxxxx>
    Tested-by: Niklas Cassel <niklas.cassel@xxxxxxx> # pm80xx
    Reviewed-by: Jason Yan <yanaijie@xxxxxxxxxx>
    Signed-off-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx>
    Stable-dep-of: bb544224da77 ("scsi: hisi_sas: Handle NCQ error when IPTT is valid")
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index 2fd55ef9ffca5..a34d06fd47f06 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
@@ -886,6 +886,21 @@ void sas_ata_wait_eh(struct domain_device *dev)
 	ata_port_wait_eh(ap);
 }
 
+void sas_ata_device_link_abort(struct domain_device *device, bool force_reset)
+{
+	struct ata_port *ap = device->sata_dev.ap;
+	struct ata_link *link = &ap->link;
+
+	device->sata_dev.fis[2] = ATA_ERR | ATA_DRDY; /* tf status */
+	device->sata_dev.fis[3] = ATA_ABORTED; /* tf error */
+
+	link->eh_info.err_mask |= AC_ERR_DEV;
+	if (force_reset)
+		link->eh_info.action |= ATA_EH_RESET;
+	ata_link_abort(link);
+}
+EXPORT_SYMBOL_GPL(sas_ata_device_link_abort);
+
 int sas_execute_ata_cmd(struct domain_device *device, u8 *fis, int force_phy_id)
 {
 	struct sas_tmf_task tmf_task = {};
diff --git a/include/scsi/sas_ata.h b/include/scsi/sas_ata.h
index ec646217e7f6e..e7d466df81576 100644
--- a/include/scsi/sas_ata.h
+++ b/include/scsi/sas_ata.h
@@ -32,6 +32,7 @@ void sas_probe_sata(struct asd_sas_port *port);
 void sas_suspend_sata(struct asd_sas_port *port);
 void sas_resume_sata(struct asd_sas_port *port);
 void sas_ata_end_eh(struct ata_port *ap);
+void sas_ata_device_link_abort(struct domain_device *dev, bool force_reset);
 int sas_execute_ata_cmd(struct domain_device *device, u8 *fis,
 			int force_phy_id);
 int sas_ata_wait_after_reset(struct domain_device *dev, unsigned long deadline);
@@ -88,6 +89,11 @@ static inline void sas_ata_end_eh(struct ata_port *ap)
 {
 }
 
+static inline void sas_ata_device_link_abort(struct domain_device *dev,
+					     bool force_reset)
+{
+}
+
 static inline int sas_execute_ata_cmd(struct domain_device *device, u8 *fis,
 				      int force_phy_id)
 {



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux