From nobody Wed Nov 19 21:44:38 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 4dBZkt72dfz6JKFZ for ; Wed, 19 Nov 2025 21:44:38 +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 4dBZkt3VfJz3CWL for ; Wed, 19 Nov 2025 21:44:38 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1763588678; 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=z54zxsIVPhz7NJP4dvMlkL+4dBzV4tf3GzaXBlMrPLQ=; b=do4X4NT/n3Qth7z4W/T8DgezRfxIzdmhecaJUIanI/lcaOSQy2fysA/P0QrIvbLUGDI011 Ca99gnl8QgNCesD8a/Q54gXo8FYRHMcMlWComh2YYmbechlJI4vyI/Swry3rtBXbpB3fqf +BlF7VDZqyefU3kq+PW6W8ACRKVGUCP3xZBB41/ZRHh047Jg/4y0vSrPPrynC7PNAgB1HO kuEvhDL8lSqA91tfwF7eRu89LhmZjHlBRkJVLqxBQnSVO877ZZsH3vsyOeuRbMyX/SUjIE eVd3RiB398wopBd4EV9tRYc0628gOv8yx+P5QfSWaYHa1AVWCGz3WwjJodVYwQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1763588678; 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=z54zxsIVPhz7NJP4dvMlkL+4dBzV4tf3GzaXBlMrPLQ=; b=ewpbDutCvFK5OZyqAyf2J2XaBmdAC//ryq+X8ZP5qC1ftPDStDcFPaj3Qh6bCKhTCnB5pc 1EV1DkIs7cYlWRhdfboP743IonYq8dBiSfC4BsyAGL2+61FHx4bPWr4JqmF+Mis9Ed6WuE NLqjbuQEGSOG1w4BLuxTOt/SgOuO5O1LW3syJfQjq0C8K0t/i9A9s2830rNU5Y8jgi8kQX gLCYuJnqrqenAuiWpzW+rJ9ZL4lcH4xpGVDqVPGdsEYeEU/fd+IvAG+VM6pfQffJkV+r3q YX1MdEV03XOOgTo2LX96FSt43pVChdC/IgmaVHAKNL9b/csDA3dRl73M3aJ3NQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1763588678; a=rsa-sha256; cv=none; b=OmO5szBShxvzYqATFV6ZpIKvhZg+rfsi3cSnDP2xrtdJegYIgW2FWHYS4hE8X8vCd4Vlz9 OXgrbfjrEDGeBSgAsY5VsdgMWtnZfQV+qAK550JLlEA29FMo6R/G1eusnEJdXPdFYjIzHk /pPDBDXSfvnxGt19RVG1mB0+p+QZAyQQP8rMPAVbVw5reopK9UztAEXBtjulVyYYfZCN3k EFDrMOfxUqCtjCSAjkVtlPtGWGU5AY/CQjm7eCdSiBzFvMJlTKLEFaDbr77zDSCIaOKxlc 3VuKghKXJU7iccFJOI/0wsJus3uDap5KIuARFiAVFCku75TiN/ZzYZIaFnTXcA== 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 4dBZkt2mPczxnv for ; Wed, 19 Nov 2025 21:44:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 314f5 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 19 Nov 2025 21:44:38 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Wanpeng Qian From: Colin Percival Subject: git: da71efa95d34 - releng/15.0 - 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: cperciva X-Git-Repository: src X-Git-Refname: refs/heads/releng/15.0 X-Git-Reftype: branch X-Git-Commit: da71efa95d340ca6625a9b1cd9a8ceb6cd199daa Auto-Submitted: auto-generated Date: Wed, 19 Nov 2025 21:44:38 +0000 Message-Id: <691e3a46.314f5.5ffe55b9@gitrepo.freebsd.org> The branch releng/15.0 has been updated by cperciva: URL: https://cgit.FreeBSD.org/src/commit/?id=da71efa95d340ca6625a9b1cd9a8ceb6cd199daa commit da71efa95d340ca6625a9b1cd9a8ceb6cd199daa Author: Wanpeng Qian AuthorDate: 2025-11-18 17:24:13 +0000 Commit: Colin Percival CommitDate: 2025-11-19 21:37:19 +0000 nvd: handle namespace changes Signal the new media size when the namespace changes size. Approved by: re (cperciva) Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D33032 (cherry picked from commit bd769e73d8f1d5141b1c2eb2322b4c6caed5d9e0) (cherry picked from commit 96a7ed1e7fb41df17e783503371533cc8db98540) --- 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) {