From nobody Wed Nov 19 04:13:25 2025 X-Original-To: dev-commits-src-branches@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 4dB7Py08F8z6HCl0 for ; Wed, 19 Nov 2025 04:13:26 +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 4dB7Px499Lz3ghF for ; Wed, 19 Nov 2025 04:13:25 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1763525605; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=uyu+JfvO2JrBfNvN8OAKnJB6kdXP0CF+nPXK3pdsuKY=; b=Ic0pl0AtYB2FMF1AE7SQxEEOEcxEF1Gozy8et9LsyA+2iL7uEYFCLLB6ckIEYLVpIqXjAu OcD2ZQg/OPkQ4H5nbi/NM6CAjajtbnaVDgy8x5ZNh1gn3y8RekIqNt4CmiOzc9TXwtqP4x gs1XvoBhs8ArhKYHL4M3VBAYKxydLeaPxKCI8/uszgDNEpV5LMS27B8LMJF2yNRqB19d0U zSarvp5ctDhK0/+6vN7iGr6EnkTWFEr99bgGyclIcIit5GDWb2a+2Qc9Phx33m/BJvGeYS Ny839ZoLhOvGbxn0PtXpaEy8Xg092QDO+XCWpzPAB7wwGJrbB0xuVg99NMyrkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1763525605; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=uyu+JfvO2JrBfNvN8OAKnJB6kdXP0CF+nPXK3pdsuKY=; b=s8JXvZsCPH5icqDvfxVqSjRDlrwMBOiMJjdCvf9B2q2t4GBAV+S+b0O5lvjCLsyPIorykW sSsoDV+0v5CsfMXiwuHH1sLEVVZHaVk8LSReoyU0FMV3UXRycPxOqg3Rz+jZcKLRDMGK4t MtVFJ6b5zlzjFJ80/rhtTq3VOrDXPilKWamQoNWRJnihvvEypwIJRDGPZnxKKMTA8hHzeD HQr9TcqfhcoRXV2dLNU3VgLOFfLQ/5DF/PR4x89tbTdRrf4bVLsVMgkMNV0UAZAtFJfZbl T6RRaXTZFnCM7xX3bK5O82/LbGRAqTRfYb2tz1zSd48EsjIB0qF6z8xcm9+iUQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1763525605; a=rsa-sha256; cv=none; b=lYV155FBIGh5flaFvK/YsW66+ZENW32EcyWkeBdpnUqeT2mrKEqiitu+/XKqjTLkvzcRDW NFwCcllXDs6zRQP+uGMqkcwSjL7GrfKOiTl5tVmyAS6FmvT5Y7yoZ0FLu63JAgc8dTK3Ap 5UT30FefdA0UwjJuXbz1d3q6gAkySmsfVi1+MSgTlftWtCj3t2avywwsyfQxn6i2EuRRnY LVRVS5TZJ0Ws5KsoWvr9SITdPlnP6+1mAT+2OUruxbdURrNITGhp2Z0xyOTv2/qEXSHIVY seRuRNOWvwfpO2i2gHPATYlyP9Px++cwT9cxs7MnxS768DJMng+7w/3/56RPIA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dB7Px357kz8NY for ; Wed, 19 Nov 2025 04:13:25 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 849e by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 19 Nov 2025 04:13:25 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Wanpeng Qian From: Warner Losh Subject: git: 96a7ed1e7fb4 - stable/15 - nvd: handle namespace changes List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 96a7ed1e7fb41df17e783503371533cc8db98540 Auto-Submitted: auto-generated Date: Wed, 19 Nov 2025 04:13:25 +0000 Message-Id: <691d43e5.849e.20667202@gitrepo.freebsd.org> The branch stable/15 has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=96a7ed1e7fb41df17e783503371533cc8db98540 commit 96a7ed1e7fb41df17e783503371533cc8db98540 Author: Wanpeng Qian AuthorDate: 2025-11-18 17:24:13 +0000 Commit: Warner Losh CommitDate: 2025-11-19 04:10:53 +0000 nvd: handle namespace changes Signal the new media size when the namespace changes size. Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D33032 (cherry picked from commit bd769e73d8f1d5141b1c2eb2322b4c6caed5d9e0) --- sys/dev/nvd/nvd.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/sys/dev/nvd/nvd.c b/sys/dev/nvd/nvd.c index 33b43efd24c1..4737b2b03ae9 100644 --- a/sys/dev/nvd/nvd.c +++ b/sys/dev/nvd/nvd.c @@ -61,6 +61,7 @@ static void nvd_done(void *arg, const struct nvme_completion *cpl); static void nvd_gone(struct nvd_disk *ndisk); static void *nvd_new_disk(struct nvme_namespace *ns, void *ctrlr); +static void *nvd_ns_changed(struct nvme_namespace *ns, void *ctrlr); static void *nvd_new_controller(struct nvme_controller *ctrlr); static void nvd_controller_fail(void *ctrlr); @@ -154,7 +155,7 @@ nvd_load(void) TAILQ_INIT(&ctrlr_head); TAILQ_INIT(&disk_head); - consumer_handle = nvme_register_consumer(nvd_new_disk, + consumer_handle = nvme_register_consumer(nvd_ns_changed, nvd_new_controller, NULL, nvd_controller_fail); return (consumer_handle != NULL ? 0 : -1); @@ -512,6 +513,48 @@ nvd_new_disk(struct nvme_namespace *ns, void *ctrlr_arg) return (ndisk); } +static void +nvd_resize(struct nvd_disk *ndisk) +{ + struct disk *disk = ndisk->disk; + struct nvme_namespace *ns = ndisk->ns; + + disk->d_sectorsize = nvme_ns_get_sector_size(ns); + disk->d_mediasize = (off_t)nvme_ns_get_size(ns); + disk->d_maxsize = nvme_ns_get_max_io_xfer_size(ns); + disk->d_delmaxsize = (off_t)nvme_ns_get_size(ns); + if (disk->d_delmaxsize > nvd_delete_max) + disk->d_delmaxsize = nvd_delete_max; + + disk_resize(disk, M_NOWAIT); + + printf(NVD_STR"%u: NVMe namespace resized\n", ndisk->unit); + printf(NVD_STR"%u: %juMB (%ju %u byte sectors)\n", disk->d_unit, + (uintmax_t)disk->d_mediasize / (1024*1024), + (uintmax_t)disk->d_mediasize / disk->d_sectorsize, + disk->d_sectorsize); +} + +static void * +nvd_ns_changed(struct nvme_namespace *ns, void *ctrlr_arg) +{ + struct nvd_disk *ndisk; + struct nvd_controller *ctrlr = ctrlr_arg; + + if ((ns->flags & NVME_NS_CHANGED) == 0) + return (nvd_new_disk(ns, ctrlr_arg)); + + mtx_lock(&nvd_lock); + TAILQ_FOREACH(ndisk, &ctrlr->disk_head, ctrlr_tailq) { + if (ndisk->ns->id != ns->id) + continue; + nvd_resize(ndisk); + break; + } + mtx_unlock(&nvd_lock); + return (ctrlr_arg); +} + static void nvd_controller_fail(void *ctrlr_arg) {