Patch "ata: libata-core: fetch sense data for successful commands iff CDL enabled" has been added to the 6.5-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

    ata: libata-core: fetch sense data for successful commands iff CDL enabled

to the 6.5-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:
     ata-libata-core-fetch-sense-data-for-successful-comm.patch
and it can be found in the queue-6.5 subdirectory.

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



commit e0d5ca37f6dea43f58be8cd072f3af6924aaaf2e
Author: Niklas Cassel <niklas.cassel@xxxxxxx>
Date:   Wed Sep 13 17:04:43 2023 +0200

    ata: libata-core: fetch sense data for successful commands iff CDL enabled
    
    [ Upstream commit 5e35a9ac3fe3a0d571b899a16ca84253e53dc70c ]
    
    Currently, we fetch sense data for a _successful_ command if either:
    1) Command was NCQ and ATA_DFLAG_CDL_ENABLED flag set (flag
       ATA_DFLAG_CDL_ENABLED will only be set if the Successful NCQ command
       sense data supported bit is set); or
    2) Command was non-NCQ and regular sense data reporting is enabled.
    
    This means that case 2) will trigger for a non-NCQ command which has
    ATA_SENSE bit set, regardless if CDL is enabled or not.
    
    This decision was by design. If the device reports that it has sense data
    available, it makes sense to fetch that sense data, since the sk/asc/ascq
    could be important information regardless if CDL is enabled or not.
    
    However, the fetching of sense data for a successful command is done via
    ATA EH. Considering how intricate the ATA EH is, we really do not want to
    invoke ATA EH unless absolutely needed.
    
    Before commit 18bd7718b5c4 ("scsi: ata: libata: Handle completion of CDL
    commands using policy 0xD") we never fetched sense data for successful
    commands.
    
    In order to not invoke the ATA EH unless absolutely necessary, even if the
    device claims support for sense data reporting, only fetch sense data for
    successful (NCQ and non-NCQ commands) commands that are using CDL.
    
    [Damien] Modified the check to test the qc flag ATA_QCFLAG_HAS_CDL
    instead of the device support for CDL, which is implied for commands
    using CDL.
    
    Fixes: 3ac873c76d79 ("ata: libata-core: fix when to fetch sense data for successful commands")
    Signed-off-by: Niklas Cassel <niklas.cassel@xxxxxxx>
    Signed-off-by: Damien Le Moal <dlemoal@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index c7a29c3ac6701..291e128f4d2b4 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -4919,11 +4919,8 @@ void ata_qc_complete(struct ata_queued_cmd *qc)
 	 * been aborted by the device due to a limit timeout using the policy
 	 * 0xD. For these commands, invoke EH to get the command sense data.
 	 */
-	if (qc->result_tf.status & ATA_SENSE &&
-	    ((ata_is_ncq(qc->tf.protocol) &&
-	      dev->flags & ATA_DFLAG_CDL_ENABLED) ||
-	     (!ata_is_ncq(qc->tf.protocol) &&
-	      ata_id_sense_reporting_enabled(dev->id)))) {
+	if (qc->flags & ATA_QCFLAG_HAS_CDL &&
+	    qc->result_tf.status & ATA_SENSE) {
 		/*
 		 * Tell SCSI EH to not overwrite scmd->result even if this
 		 * command is finished with result SAM_STAT_GOOD.



[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