diff --git a/sys/dev/nvme/nvme_qpair.c b/sys/dev/nvme/nvme_qpair.c --- a/sys/dev/nvme/nvme_qpair.c +++ b/sys/dev/nvme/nvme_qpair.c @@ -1173,10 +1173,14 @@ return; } + /* + * Once the tracker is on the outstanding_tr list, it must have a valid + * timeout, so set it to the max until we find out what the actual + * deadline is to avoid false positive timeouts due to stale values. + */ + tr->deadline = SBT_MAX; TAILQ_REMOVE(&qpair->free_tr, tr, tailq); TAILQ_INSERT_TAIL(&qpair->outstanding_tr, tr, tailq); - if (!qpair->timer_armed) - tr->deadline = SBT_MAX; tr->req = req; switch (req->type) {