Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'ata-7.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux

Pull ata fixes from Niklas Cassel:

- Fix a problem where the deferred non-NCQ command would incorrectly
get completed as a failed command, if there was another command that
timed out. Found by Gemini (Guenter)

- The deferred non-NCQ command work is only supposed to run after the
last NCQ command finishes. However, because the work was never
canceled on error (e.g. a timeout), the work could incorrectly run
when commands were still in flight. Found by syzbot (me)

- Add a quirk to make sure that QEMU harddrives can potentially use up
to 32 MiB I/Os (Pedro)

- Add a quirk to disable LPM on Seagate ST1000DM010-2EP102 (Maximilian)

* tag 'ata-7.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux:
ata: libata-eh: Fix detection of deferred qc timeouts
ata: libata-core: Add BRIDGE_OK quirk for QEMU drives
ata: libata: cancel pending work after clearing deferred_qc
ata: libata-core: Disable LPM on ST1000DM010-2EP102

+5 -1
+2
drivers/ata/libata-core.c
··· 4189 4189 ATA_QUIRK_FIRMWARE_WARN }, 4190 4190 4191 4191 /* Seagate disks with LPM issues */ 4192 + { "ST1000DM010-2EP102", NULL, ATA_QUIRK_NOLPM }, 4192 4193 { "ST2000DM008-2FR102", NULL, ATA_QUIRK_NOLPM }, 4193 4194 4194 4195 /* drives which fail FPDMA_AA activation (some may freeze afterwards) ··· 4232 4231 /* Devices that do not need bridging limits applied */ 4233 4232 { "MTRON MSP-SATA*", NULL, ATA_QUIRK_BRIDGE_OK }, 4234 4233 { "BUFFALO HD-QSU2/R5", NULL, ATA_QUIRK_BRIDGE_OK }, 4234 + { "QEMU HARDDISK", "2.5+", ATA_QUIRK_BRIDGE_OK }, 4235 4235 4236 4236 /* Devices which aren't very happy with higher link speeds */ 4237 4237 { "WD My Book", NULL, ATA_QUIRK_1_5_GBPS },
+2 -1
drivers/ata/libata-eh.c
··· 647 647 break; 648 648 } 649 649 650 - if (qc == ap->deferred_qc) { 650 + if (i < ATA_MAX_QUEUE && qc == ap->deferred_qc) { 651 651 /* 652 652 * This is a deferred command that timed out while 653 653 * waiting for the command queue to drain. Since the qc ··· 659 659 */ 660 660 WARN_ON_ONCE(qc->flags & ATA_QCFLAG_ACTIVE); 661 661 ap->deferred_qc = NULL; 662 + cancel_work(&ap->deferred_qc_work); 662 663 set_host_byte(scmd, DID_TIME_OUT); 663 664 scsi_eh_finish_cmd(scmd, &ap->eh_done_q); 664 665 } else if (i < ATA_MAX_QUEUE) {
+1
drivers/ata/libata-scsi.c
··· 1699 1699 1700 1700 scmd = qc->scsicmd; 1701 1701 ap->deferred_qc = NULL; 1702 + cancel_work(&ap->deferred_qc_work); 1702 1703 ata_qc_free(qc); 1703 1704 scmd->result = (DID_SOFT_ERROR << 16); 1704 1705 scsi_done(scmd);