From nobody Thu Sep 03 15:34:30 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hbNtt5dXtz6rRB9 for ; Thu, 03 Sep 2026 15:34:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hbNtt562sz4D3d for ; Thu, 03 Sep 2026 15:34:30 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788449670; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Juskgje3flYou41CfctnEpB+sxO4tAw3UGyftaL3vHg=; b=rT8Zo2RgKo/MMFeDXVbv7XlZUMzcgWV/Ei46goZWGEyZ+RMBWCVQODkLNAqSnsuyB48W9G /F+PrRqLTSZlOPSZy3rZu0SgNdAC3cz6JDbkwSZZojK6PFUMj7+H35fbaO8YGEqifrzqIT Ap0ZRJ5JODjFKZZ/gkrdldkfokOq02Dep+IsmJb/c5P07xOnQDNDektEyhZpm6OtYXD1rB 5I2WvY5wfGWRUXRrC9AxsfKUMSR8bnrQw9MaBuZnNwxu1nDSLKh0Spz03upLSkSQYBAqlA cDYbJwX5IQ21zU/s/QkvrClu+O1e1QVv9iO/hf1M+kfmpmIjeHWSedPkw5amcA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1788449670; a=rsa-sha256; cv=none; b=UOsCU8cCe6sTjLJU9FipcPmKchfKTlD/mddh+sqf1RShkPlwvDyMjLR/8SV2pLGA+OwyBx zdFJSUUBNKrEF32VNiUcdm1J+0fh5N4G1Usx3rfKwDnq3QPGFa98GYkwc1QDD3eae/G32D stTZyD5VUFOLmGRs94gNqjq6idve/3jqCWWglLmiGRgDBdPHeyiWHscx8dnInh3Ri+UEd9 jkRlLoxKMaz2r3V7h7P3KBKTeS4uEOMSFASY9HCw0P/Z1bsHPeuuneitiltyK/pPjy30YB +RgV2uU+kIMzqB0LkE0RUeaDSbAwScIxWDTqL3feN6W2LxAau87aNrds+Dc1UA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788449670; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Juskgje3flYou41CfctnEpB+sxO4tAw3UGyftaL3vHg=; b=wbJoj8mOqgcXf1lAbB/GICVefxRbTPUxYMo/DceO1DvfnAxYB7gtxvVIFLgYXhLA/klw+K 6VKb4w71X8Mx1YcnMdo6LSZF+JqDBIleQddnRROfiO6vOpj++nwfvWP7PhWBLIPv6V9ZIU J0DLr7C/Qd3wFlhHbiwQOLWQyobicBDdws60AgD1h8H3AvVsqnMDeQuT0VNSX1E36Nhmc0 /VuZPHZ+YJBmf+33E6wxbRvbxQZu6rIB6T1mC2HhRrnrTXvd5MXT9QZpXNahDeW21phlIk BPNxWVDkpo24tVSmb8/D2tgUqhHqPe45pPEmTW1zOe7AJh768bOI/c8DgkXVFg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hbNtt3y0bz3p5 for ; Thu, 03 Sep 2026 15:34:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 323c6 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 03 Sep 2026 15:34:30 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Abdelkader Boudih Subject: git: b90c2b13e975 - main - nvme: complete requests when payload DMA mapping fails List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: seuros X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b90c2b13e975c803e426a6e6f080a6089d08e6ab Auto-Submitted: auto-generated Date: Thu, 03 Sep 2026 15:34:30 +0000 Message-Id: <6a999386.323c6.44f3e790@gitrepo.freebsd.org> The branch main has been updated by seuros: URL: https://cgit.FreeBSD.org/src/commit/?id=b90c2b13e975c803e426a6e6f080a6089d08e6ab commit b90c2b13e975c803e426a6e6f080a6089d08e6ab Author: Abdelkader Boudih AuthorDate: 2026-09-03 15:33:49 +0000 Commit: Abdelkader Boudih CommitDate: 2026-09-03 15:33:49 +0000 nvme: complete requests when payload DMA mapping fails bus_dmamap_load_mem() reports most mapping failures, including EFBIG, only through its callback and then returns zero. nvme_payload_map() logged the error without telling the submission path, so the tracker stayed on the outstanding list with no command submitted and no timeout armed, stalling all later I/O on the queue behind it. Approved by: ngie (co-mentor) MFC after: 1 week Reviewed by: ngie, imp Differential Revision: https://reviews.freebsd.org/D59151 --- sys/dev/nvme/nvme_qpair.c | 37 +++++++++++-------------------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/sys/dev/nvme/nvme_qpair.c b/sys/dev/nvme/nvme_qpair.c index 29e373e1b00c..6411a3909917 100644 --- a/sys/dev/nvme/nvme_qpair.c +++ b/sys/dev/nvme/nvme_qpair.c @@ -1053,7 +1053,6 @@ nvme_qpair_submit_tracker(struct nvme_qpair *qpair, struct nvme_tracker *tr) mtx_assert(&qpair->lock, MA_OWNED); req = tr->req; - req->cmd.cid = qpair->cid_base + tr->cid; qpair->act_tr[tr->cid] = tr; ctrlr = qpair->ctrlr; @@ -1089,16 +1088,16 @@ static void nvme_payload_map(void *arg, bus_dma_segment_t *seg, int nseg, int error) { struct nvme_tracker *tr = arg; + struct nvme_qpair *qpair = tr->qpair; uint32_t cur_nseg; - /* - * If the mapping operation failed, return immediately. The caller - * is responsible for detecting the error status and failing the - * tracker manually. - */ if (error != 0) { - nvme_printf(tr->qpair->ctrlr, - "nvme_payload_map err %d\n", error); + nvme_printf(qpair->ctrlr, + "payload DMA mapping failed with error %d\n", error); + mtx_unlock(&qpair->lock); + nvme_qpair_manual_complete_tracker(tr, NVME_SCT_GENERIC, + NVME_SC_DATA_TRANSFER_ERROR, DO_NOT_RETRY, ERROR_PRINT_ALL); + mtx_lock(&qpair->lock); return; } @@ -1137,7 +1136,6 @@ static void _nvme_qpair_submit_request(struct nvme_qpair *qpair, struct nvme_request *req) { struct nvme_tracker *tr; - int err = 0; bool is_admin = qpair == &qpair->ctrlr->adminq; mtx_assert(&qpair->lock, MA_OWNED); @@ -1180,6 +1178,7 @@ _nvme_qpair_submit_request(struct nvme_qpair *qpair, struct nvme_request *req) TAILQ_INSERT_TAIL(&qpair->outstanding_tr, tr, tailq); tr->deadline = SBT_MAX; tr->req = req; + req->cmd.cid = qpair->cid_base + tr->cid; if (!req->payload_valid) { nvme_qpair_submit_tracker(tr->qpair, tr); @@ -1191,23 +1190,9 @@ _nvme_qpair_submit_request(struct nvme_qpair *qpair, struct nvme_request *req) * nvme_qpair_submit_tracker (we call it above directly * when there's no map to load). */ - err = bus_dmamap_load_mem(tr->qpair->dma_tag_payload, - tr->payload_dma_map, &req->payload, nvme_payload_map, tr, 0); - if (err != 0) { - /* - * The dmamap operation failed, so we manually fail the - * tracker here with DATA_TRANSFER_ERROR status. - * - * nvme_qpair_manual_complete_tracker must not be called - * with the qpair lock held. - */ - nvme_printf(qpair->ctrlr, - "bus_dmamap_load_mem returned 0x%x!\n", err); - mtx_unlock(&qpair->lock); - nvme_qpair_manual_complete_tracker(tr, NVME_SCT_GENERIC, - NVME_SC_DATA_TRANSFER_ERROR, DO_NOT_RETRY, ERROR_PRINT_ALL); - mtx_lock(&qpair->lock); - } + (void)bus_dmamap_load_mem(tr->qpair->dma_tag_payload, + tr->payload_dma_map, &req->payload, nvme_payload_map, tr, + BUS_DMA_NOWAIT); } void