From nobody Mon Nov 10 15:51:24 2025 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 4d4vKT4ZKCz6GtT1; Mon, 10 Nov 2025 15:51:25 +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 "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4d4vKT1Dkgz43wC; Mon, 10 Nov 2025 15:51:25 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1762789885; 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=Mu3dK6w4AKJybD9hC7Kux/QU8SoCRAe9wlt1da+u3P8=; b=tA1zT5AihH+AWqEnn4p8a1+mrCGJYIeLHaVDcB7IKmSZbFHenPy1nxTW5MGeG7/ALNvgg6 1sWYb9Y/5D3PcnPShVZAPgEcKVo7H/eOKQXgMa/t4iAmC1KWCyTJpfI2pX2GdeHs+Ozyab iWZJVbKjNfevMb6OiBqhipxFnVLpDQbi3S4pr6gWJCot8pwEt/xT2MIFdoUcKQOpUNqg/i Vb9+L4nhMusCpRZ3BsVYUGQ6fPtNlZ3vLknwQYh0QhXIZxby62LxgGFVw9W6BK4zLrXeed kV+f5rkOVKtagKNByXsBmm94F+USz6sFGPMbPk9v6QyfVbYxmxMShZoreU4XZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1762789885; 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=Mu3dK6w4AKJybD9hC7Kux/QU8SoCRAe9wlt1da+u3P8=; b=lK3YhBM4OkgJiKWAm60eh8yXpVSZU3FQ0QUf6up6Lgcazj0seZTmVm+2lSxKr2n6iSVUp9 gIHbYliCgor+fpklJKUHFP7WJOG9+8tjlMEbiej0hPRx+k1tFm1yW9rSXgECTlaNEOnYJI bBlVIQFDQtN3M4ZsmmD3IRhbk21RMjtbQVU8+hPF524ste0D2MTeBtD+b3TZpV90TK9iIl 629cdXilKeQFBmWwcEb6vafp3Y6RT8x4zAC/jfxcnSEEKU9bW07dy/iOqPSAP8rGdA3dl/ jYZOM3IgW3ZSKCogpLj/oueWfOEedYkNkL3j4RtmRZII74jSzZWtp7mnTdHrxA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1762789885; a=rsa-sha256; cv=none; b=Muzil8IynSGSrKxNY3+NZ4utHusstin/V+kE18Oa9kOYD4sLYfX9HQtoC+8ZHfm25JYGyt 1LLJYMtbjnOmXjmenHKuJrONZB0LXZcU+erloQxDropBdPftgxxca6b1bqisRM5erKksgC d5zFckkEk9Ug1zsyQ/x/zi8d8DfpffJGo03y+BhOJLlsRN2MMITII45N1CbHYjreok06g4 qIhe/OU0Y9o3F2+zFt9T4E8JJzm0aGOvxymaeXZTw1UE7OtNtfUC2A3vSvklZO52P6Y9Ay AdQgiBzabvf8+iQlIhnqjavAzv0eSNAERUn6cHNLcJLeAt71P4wz5O4sn1TiyA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4d4vKT0jsJz8YK; Mon, 10 Nov 2025 15:51:25 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 5AAFpP2o048086; Mon, 10 Nov 2025 15:51:25 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 5AAFpOPD048083; Mon, 10 Nov 2025 15:51:24 GMT (envelope-from git) Date: Mon, 10 Nov 2025 15:51:24 GMT Message-Id: <202511101551.5AAFpOPD048083@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: John Baldwin Subject: git: 8ced50767933 - main - nvmft: Honor any IOCCSZ limit imposed by the transport 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhb X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8ced50767933f3e2949456367d4d9a64797daec3 Auto-Submitted: auto-generated The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=8ced50767933f3e2949456367d4d9a64797daec3 commit 8ced50767933f3e2949456367d4d9a64797daec3 Author: John Baldwin AuthorDate: 2025-11-10 15:50:47 +0000 Commit: John Baldwin CommitDate: 2025-11-10 15:50:47 +0000 nvmft: Honor any IOCCSZ limit imposed by the transport Sponsored by: Chelsio Communications --- sys/dev/nvmf/controller/nvmft_controller.c | 14 ++++++++++++++ sys/dev/nvmf/controller/nvmft_qpair.c | 6 ++++++ sys/dev/nvmf/controller/nvmft_var.h | 1 + 3 files changed, 21 insertions(+) diff --git a/sys/dev/nvmf/controller/nvmft_controller.c b/sys/dev/nvmf/controller/nvmft_controller.c index e618972f46cf..1618c1f96dac 100644 --- a/sys/dev/nvmf/controller/nvmft_controller.c +++ b/sys/dev/nvmf/controller/nvmft_controller.c @@ -103,6 +103,19 @@ nvmft_keep_alive_timer(void *arg) callout_schedule_sbt(&ctrlr->ka_timer, ctrlr->ka_sbt, 0, C_HARDCLOCK); } +static void +nvmft_update_cdata(struct nvmft_controller *ctrlr) +{ + uint32_t ioccsz, val; + + val = nvmft_max_ioccsz(ctrlr->admin); + if (val != 0) { + ioccsz = le32toh(ctrlr->cdata.ioccsz) * 16; + if (val < ioccsz) + ctrlr->cdata.ioccsz = htole32(val / 16); + } +} + int nvmft_handoff_admin_queue(struct nvmft_port *np, enum nvmf_trtype trtype, const nvlist_t *params, const struct nvmf_fabric_connect_cmd *cmd, @@ -160,6 +173,7 @@ nvmft_handoff_admin_queue(struct nvmft_port *np, enum nvmf_trtype trtype, (int)sizeof(data->hostnqn), data->hostnqn); ctrlr->admin = qp; ctrlr->trtype = trtype; + nvmft_update_cdata(ctrlr); /* * The spec requires a non-zero KeepAlive timer, but allow a diff --git a/sys/dev/nvmf/controller/nvmft_qpair.c b/sys/dev/nvmf/controller/nvmft_qpair.c index 73c7bb280780..1300c9ec91fc 100644 --- a/sys/dev/nvmf/controller/nvmft_qpair.c +++ b/sys/dev/nvmf/controller/nvmft_qpair.c @@ -182,6 +182,12 @@ nvmft_qpair_name(struct nvmft_qpair *qp) return (qp->name); } +uint32_t +nvmft_max_ioccsz(struct nvmft_qpair *qp) +{ + return (nvmf_max_ioccsz(qp->qp)); +} + static int _nvmft_send_response(struct nvmft_qpair *qp, const void *cqe) { diff --git a/sys/dev/nvmf/controller/nvmft_var.h b/sys/dev/nvmf/controller/nvmft_var.h index 85032b2dc55f..b3a5278a639c 100644 --- a/sys/dev/nvmf/controller/nvmft_var.h +++ b/sys/dev/nvmf/controller/nvmft_var.h @@ -145,6 +145,7 @@ struct nvmft_controller *nvmft_qpair_ctrlr(struct nvmft_qpair *qp); void nvmft_qpair_datamove(struct nvmft_qpair *qp, union ctl_io *io); uint16_t nvmft_qpair_id(struct nvmft_qpair *qp); const char *nvmft_qpair_name(struct nvmft_qpair *qp); +uint32_t nvmft_max_ioccsz(struct nvmft_qpair *qp); void nvmft_command_completed(struct nvmft_qpair *qp, struct nvmf_capsule *nc); int nvmft_send_response(struct nvmft_qpair *qp, const void *cqe);