From: Sagi Grimberg <sagi@grimberg.me>
To: "Heyne, Maximilian" <mheyne@amazon.de>, Keith Busch <kbusch@kernel.org>
Cc: Jens Axboe <axboe@kernel.dk>, Christoph Hellwig <hch@lst.de>,
"linux-nvme@lists.infradead.org" <linux-nvme@lists.infradead.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2] nvme: Let the blocklayer set timeouts for requests
Date: Fri, 12 Dec 2025 15:43:17 +0200 [thread overview]
Message-ID: <1b396ea8-8256-48bf-bee2-92e500f3ef80@grimberg.me> (raw)
In-Reply-To: <20251205-myopia-been-ed739f86@mheyne-amazon>
On 05/12/2025 9:33, Heyne, Maximilian wrote:
> On Thu, Dec 04, 2025 at 07:34:26PM +0000, Heyne, Maximilian wrote:
>> On Thu, Dec 04, 2025 at 09:13:35AM -0700, Keith Busch wrote:
>>> On Thu, Dec 04, 2025 at 02:11:50PM +0000, Heyne, Maximilian wrote:
>>>> @@ -724,10 +724,8 @@ void nvme_init_request(struct request *req, struct nvme_command *cmd)
>>>> struct nvme_ns *ns = req->q->disk->private_data;
>>>>
>>>> logging_enabled = ns->head->passthru_err_log_enabled;
>>>> - req->timeout = NVME_IO_TIMEOUT;
>>>> } else { /* no queuedata implies admin queue */
>>>> logging_enabled = nr->ctrl->passthru_err_log_enabled;
>>>> - req->timeout = NVME_ADMIN_TIMEOUT;
>>>> }
>>> I was trying to think of any in-kernel path using __submit_sync_cmd with
>>> an IO queue, and quick search shows there's just one: zns report zones.
>>>
>>> Everything else uses the admin queue, which doesn't have a sysfs tunable
>>> for its request_queue's default timeout. All we have is the nvme module
>>> parameter, which is writable after loading. Since that's the only way a
>>> user can modify the default time for that queue, I think we need to
>>> leave that req->timeout value as-is.
>> Ok sound like a v3 is needed where I only delete the line with
>> NVME_IO_TIMEOUT but leave the NVME_ADMIN_TIMEOUT and add a comment about
>> it. Will prepare such a patch.
>>
> I thought about this a bit more. Considering that the module parameters
> can be written to produces even more inconsistencies.
>
> With my proposed change we will have the following situation:
> 1) when a device is probed current settings for IO and admin timeout from
> the module parameters will be the respective default timeouts
> 2) almost all admin commands to the device will default to the initial
> admin timeout
> 3) almost all IO commands will adhere to whatever is set via sysfs or
> the initial default
>
> -> changes to the module parameters will (mostly) not affect already
> probed devices
>
> When we keep initializing the admin timeouts to the module parameter as
> you suggest (so half of my patch), we'll have the following situation:
>
> 1) same as above
> 2) some admin commands will use the module parameters admin timeout,
> some (ioctl's via nvme_submit_user_cmd) will use the admin queue's timeout set in 1).
> This can be made consistent if we fix nvme_submit_user_cmd.
> 3) same as above; IO timeout not affected by module parameter changes.
>
> -> changes to the module parameters affect only the admin commands but
> (mostly) not the IO commands which is inconsistent behavior.
>
> Therefore, I wonder whether people are actually making changes to the
> module parameters at runtime to adjust all device's admin timeouts. In
> that case it's at least broken for ioctl's currently.
> Should we make that timeout runtime configurable per-device too instead?
>
> In summary, I think my patch as-is leads to better consistency.
Perhaps you can simply add admin_timeout sysfs file for the controller
that would alter
the set->timeout and take the value from there in nvme_init_request
next prev parent reply other threads:[~2025-12-12 13:43 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-04 14:11 Heyne, Maximilian
2025-12-04 16:13 ` Keith Busch
2025-12-04 19:34 ` Heyne, Maximilian
2025-12-05 7:33 ` Heyne, Maximilian
2025-12-12 13:43 ` Sagi Grimberg [this message]
2025-12-12 14:39 ` Maurizio Lombardi
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=1b396ea8-8256-48bf-bee2-92e500f3ef80@grimberg.me \
--to=sagi@grimberg.me \
--cc=axboe@kernel.dk \
--cc=hch@lst.de \
--cc=kbusch@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=mheyne@amazon.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®