From nobody Tue Nov 18 21:04:54 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 4d9xvV3STbz6GYSM for ; Tue, 18 Nov 2025 21:04:54 +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 4d9xvV1fzXz3lfw for ; Tue, 18 Nov 2025 21:04:54 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1763499894; 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=KiaIPb+bYVTddydk5m2iPdIQ+iH5+QSWq5jYcdiLV0A=; b=oWMwQ57215GTGoWNliqTmJnqRKww2kxeVpDLnReGVUUWFTqW6x0ETuE6bzl4BQzQ6ilji7 veOUXjrF8VGZFIQzLTRa89c+Ka4qXahA73Z0atj4QUBH8jlftt35KrK3Mq4QqtjJQOEqSk egLfohwCvYuZQvPFcS8yfeq+4Uxttcb/eGs2TB6lAWQIodoWnOW2Y17gEPI3enZGin3qPr nJ6tpCy0VwnwFl0RZQ2RE1HCuuDMV+TN6gs65ORaDufG5yrJ0eDVVMC9zdrIrZ1aUjT1hW uLmGN8AQfGL1C55pWiATY0yNq4MjlblaOahx84VVVZKzx90K/3bS2pyT6Sh+nw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1763499894; 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=KiaIPb+bYVTddydk5m2iPdIQ+iH5+QSWq5jYcdiLV0A=; b=IKzmA8yU1ehGeNMG98zuxww4hfiGgYTMD08jAx+QRTsC4Iai3agA+wlM79E2NLzFlJFaix I8A1rn1VOG8Avvh8nw7JslycPYWvATDhaFWpiDSwgtVPxRYQsr7SL+2oPIr27GCq6Zyuy8 aLHHNhM9/Zn3Y36F4RBt4TUGj31ejwMqMWOVxsTYAl/ZhhKNdo+/65X7IhUYfBQT9HomGZ Jysm3Q/wzvR62IUVMzDHdtylip+BAfVVjiuts5hhP9FIq854qDxvT+hydhUuh999dSLsHk gSdjquKUggbej/RbtgDVRn878MxAD0UrY1jRQ2AOdB592FNOSNKzRIRG449nbQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1763499894; a=rsa-sha256; cv=none; b=NiMM7qgH7XxR6d4ydGiJIfc1qnkxZqgTcbzWx5+pZmjEK7x7Hxex5ZKMFmpGpB6o6xVXfP 0cQjcZ7tSBW8SAk/rG9sNiodJLEszVGpTLBWCU+8Ha0J4p3MCpKVZavOQMTS8ACrFRgLGF JXR4FRND1zi1J0cQ0eqjYcYIzY6d/6cbkKfX8Cxs+/hdPxTrL5+d2MRNXHDlhoXvrvHUDT fDXDdhxSd/4MyHR7QlZlKG0R1/R7YoR6xmkE8vcqmG9Uc4k1lZKbHXsJk+fQUJfQQh75IM uFqxRahT/kneojcJP7NhpoED/6DZWqm0eZxPT7c9IVL3t1zS50vCTC/vDgS40w== 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 4d9xvV0L54z193P for ; Tue, 18 Nov 2025 21:04:54 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 33b71 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 18 Nov 2025 21:04:54 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Wanpeng Qian From: Warner Losh Subject: git: bd769e73d8f1 - main - nvd: handle namespace changes 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: imp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: bd769e73d8f1d5141b1c2eb2322b4c6caed5d9e0 Auto-Submitted: auto-generated Date: Tue, 18 Nov 2025 21:04:54 +0000 Message-Id: <691cdf76.33b71.39b25744@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=bd769e73d8f1d5141b1c2eb2322b4c6caed5d9e0 commit bd769e73d8f1d5141b1c2eb2322b4c6caed5d9e0 Author: Wanpeng Qian AuthorDate: 2025-11-18 17:24:13 +0000 Commit: Warner Losh CommitDate: 2025-11-18 21:01:43 +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 --- 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) {