From: Niklas Cassel <cassel@kernel.org>
To: Eyal Lebedinsky <eyal@eyal.emu.id.au>
Cc: list linux-ide <linux-ide@vger.kernel.org>
Subject: Re: ata timeout exceptions
Date: Sun, 9 Nov 2025 21:40:26 +0100 [thread overview]
Message-ID: <aRD8OoDwE2fyP_JM@ryzen> (raw)
In-Reply-To: <acf2fa9f-f98d-4eb0-b18b-a04aa123201b@eyal.emu.id.au>
Hello Eyal,
On Mon, Nov 03, 2025 at 03:13:34PM +1100, Eyal Lebedinsky wrote:
>
> I want to understand what is going on:
>
> 1) Why do I not see an I/O error and the writes to the disk (rsync) seem to complete?
> Which layer absorbs the errors, hiding them from the application?
SCSI layer.
For a timed out command, libata will set DID_TIME_OUT:
https://github.com/torvalds/linux/blob/v6.18-rc4/drivers/ata/libata-eh.c#L652-L654
For most commands SCSI layer, SCSI will set cmd->allowed to sdkp->max_retries:
https://github.com/torvalds/linux/blob/v6.18-rc4/drivers/scsi/sd.c#L1411
which by default is 5:
https://github.com/torvalds/linux/blob/v6.18-rc4/drivers/scsi/sd.c#L3962
Thus, most commands will be retried up to 5 times:
https://github.com/torvalds/linux/blob/v6.18-rc4/drivers/scsi/scsi_error.c#L2225
Thus, the user will only see the I/O as an error if the command failed
6 times.
(Note that if the command returns sense data instead of timeout, depending on
the sense data returned, we might report an I/O error to the user immediately.
>
> 2) Why do I get only one command_timeout counted (originally, with ncq active) and none when ncq is disabled?
You are right that even if it is only a single command that times out,
the whole queue will be drained and retried.
(Because we always do a hard reset after a command timeout.)
command_timeout is most likely increased only by one because it was
only a single command that timed out. (The other commands might have
been queued but were never executed/finished.)
I have no idea why a command timeout, when NCQ has been disabled,
does not increase the command_timeout counter. My expectation would
have been for the counter to still be increased by one.
Kind regards,
Niklas
next prev parent reply other threads:[~2025-11-09 20:40 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-03 4:13 ata timeout exceptions Eyal Lebedinsky
2025-11-09 20:40 ` Niklas Cassel [this message]
2025-11-09 22:41 ` Eyal Lebedinsky
2025-11-10 13:11 ` Niklas Cassel
2025-11-14 4:32 ` Eyal Lebedinsky
2025-11-18 15:17 ` Niklas Cassel
2025-11-18 23:05 ` Eyal Lebedinsky
2025-11-19 5:41 ` Damien Le Moal
2025-11-19 13:37 ` Eyal Lebedinsky
2025-11-20 3:34 ` Damien Le Moal
2025-11-20 11:38 ` Eyal Lebedinsky
2025-11-20 12:18 ` Damien Le Moal
2025-11-20 23:53 ` Eyal Lebedinsky
2025-12-16 23:39 ` Eyal Lebedinsky
2025-12-17 1:35 ` Damien Le Moal
2025-12-17 11:56 ` Eyal Lebedinsky
2025-12-17 12:02 ` Niklas Cassel
2025-12-20 4:03 ` Eyal Lebedinsky
2025-12-21 8:34 ` Damien Le Moal
2025-12-21 12:12 ` Eyal Lebedinsky
2025-12-21 22:43 ` Eyal Lebedinsky
2025-12-21 23:14 ` Damien Le Moal
2025-12-22 2:10 ` Eyal Lebedinsky
2025-12-22 3:43 ` Damien Le Moal
2025-12-22 5:57 ` Eyal Lebedinsky
2025-12-30 22:43 ` Eyal Lebedinsky
2026-01-02 1:21 ` Damien Le Moal
2026-01-02 6:30 ` Eyal Lebedinsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aRD8OoDwE2fyP_JM@ryzen \
--to=cassel@kernel.org \
--cc=eyal@eyal.emu.id.au \
--cc=linux-ide@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.