nvme-pci: ADATA LEGEND 860 [1cc1:5772] recurring controller hang, abort ineffective, reset required; one reset failure with CSTS=0x1; 12 months of data, no host mitigation effective
"Chris Quin" <[email protected]> Fri, 07 Aug 2026 11:52:46 +0000
| Newsgroups | org.infradead.lists.linux-nvme |
|---|---|
| Message-ID | <[email protected]> |
Subject: nvme-pci: ADATA LEGEND 860 [1cc1:5772] recurring controller hang=
, abort ineffective, reset required; one reset failure with CSTS=3D0x1; 1=
2 months of data, no host mitigation effective
Hi,
Reporting a recurring controller hang on ADATA LEGEND 860 NVMe SSDs
(DRAM-less/HMB), with 12 months of event data. No host-side mitigation
tested had any effect on the event rate. Reporting for the archive and
in case a quirk entry or further debugging is useful.
Hardware/software:
- 2x ADATA LEGEND 860 2TB, firmware VF115C6C (both drives identical)
- PCI ID 1cc1:5772 -- note the PCI ID string reads "LEGEND 850 LITE
NVMe SSD (DRAM-less)", so this platform appears shared across
retail SKUs
- frmw 0x2 (single firmware slot); vendor offers no firmware update
- Kernel 7.0.12+deb13-amd64 (Debian trixie); same behavior on earlier
kernels over the past year
- The two drives are whole-disk members of a single md raid1 (md127,
ext4, hosting KVM guest images); the host OS runs from a separate
SATA md mirror, so each hang stalls guest storage but not the host
root. Light, bursty I/O workload.
Symptoms:
Roughly 6 times/month across the pair (similar rate on each drive), an
I/O command times out and only a controller reset recovers:
nvme nvme1: I/O tag 485 (51e5) opcode 0x0 (I/O Cmd) QID 10 timeout, abo=
rting req_op:FLUSH(2) size:0
nvme nvme1: Abort status: 0x0
nvme nvme1: I/O tag 485 (51e5) opcode 0x0 (I/O Cmd) QID 10 timeout, res=
et controller
nvme nvme1: 12/0/4 default/read/poll queues
~70 events over 12 months. Victim opcode is usually FLUSH; READ and
WRITE also occur. Key observations:
- The stuck command never completes regardless of wait time. io_timeout
values of 30s, 90s, 120s and ~240s were used over the year; no stuck
command ever completed, and reset was always required. Abort always
completes with status 0x0 but never rescues the command.
- Events occur only during low-I/O periods. Multiple full md resyncs
and sustained sequential transfers completed over the year with zero
events during them.
- The drives log nothing: after ~70 controller resets, both report
"Error Information Log Entries: 0", Critical Warning 0x00, clean
SMART, 0% used.
- No host-side change over 12 months affected the event rate:
* nvme_core.default_ps_max_latency_us=3D0 (APST disabled; verified via
get-feature: APSTE=3D0, all table entries zero), pcie_aspm=3Doff,
pcie_port_pm=3Doff
* nr_requests 256 -> 8 -> 16
* ext4 commit interval 5s -> 180s
* io_timeout in the 30s - 240s range
* a 5s direct-read keepalive to both controllers (one event occurred
on day 3 with it running)
* a 60s unconditional "nvme flush" keepalive, tested for a full
month: event rate unchanged (~6/month-pair, matching the 11-month
baseline). One victim was the keepalive flush itself, submitted
<60s after the previous successful flush.
The only visible change: after APST/ASPM were disabled, victims
became almost exclusively FLUSH, where earlier events included more
READ/WRITE victims.
Worst-case event (1 of ~70): reset failure and device removal.
On one occasion the controller failed the reset handshake entirely:
nvme nvme0: I/O tag 961 (53c1) opcode 0x0 (I/O Cmd) QID 13 timeout, abo=
rting req_op:FLUSH(2) size:0
nvme nvme0: I/O tag 961 (53c1) opcode 0x0 (I/O Cmd) QID 13 timeout, res=
et controller
nvme nvme0: Device not ready; aborting reset, CSTS=3D0x1
nvme0n1: I/O Cmd(0x2) @ LBA 97441816, 48 blocks, I/O Error (sct 0x3 / s=
c 0x71)
nvme nvme0: Abort status: 0x371
nvme nvme0: Device not ready; aborting reset, CSTS=3D0x1
nvme nvme0: Device not ready; aborting reset, CSTS=3D0x1
nvme nvme0: Disabling device after reset failure: -19
md/raid1:md127: Disk failure on nvme0n1, disabling device.
CSTS stayed 0x1 through three reset attempts; the device was removed
(-19) and required a host power cycle to recover, after which the md
member re-added cleanly via the write-intent bitmap. Note the abort
returned 0x371 in this event versus 0x0 in all recoverable events.
Interpretation (host-side view only):
Consistent with an internal controller state entered on the firmware's
own schedule during low activity -- below the NVMe power-state layer,
since APST is disabled and the host never enables non-operational
states -- with a wake/recovery path that hangs. I obviously can't
confirm internals from the host.
Happy to provide full logs, id-ctrl output, or to test patches.
Thanks,
Chris Quin