From nobody Wed Aug 26 00:18:05 2026 X-Original-To: dev-commits-src-all@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 4hV4xG4z5mz6qHmP for ; Wed, 26 Aug 2026 00:18:10 +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 4hV4xG4KQxz3lc9 for ; Wed, 26 Aug 2026 00:18:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787703490; 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=osi8q6f/oVYlV838IGSx7uGprz12m/1QJ3ADJpjHq00=; b=cYKWfZD8cm4KqqE4ziSC6O5WqnACMZso7qeam5dHeeQRvTp4g6MiPMMgJd2KshMWKm3jr8 C+pNgDB8bioNMJ97mxtYiFtxDoLcLwqiiHjU6o61Yqcc0GOU/VI+a5XIurMI+fQus34uAo z4J9nErDTseBQmVKe4xFRFaEBL2yVpXOd5GdHQhMbhS03zzQH5zOvM71ncFgdtJHcdhzMQ 9bdQ95uUPjgouB75bix+2YUxK6dA335M9kFD1t/exO9hqbz/tdy/cTwHR9EgVLW8QCYSy/ kbbP3qQ6DwEmkwAW+uL9MuILONaKXb2ghqujzO2a2Y0aj4+SbFJ55IQBiGSaxg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1787703490; a=rsa-sha256; cv=none; b=Ky1mserZ2bQfR5NVSZfFnorssiIQTKeSc4ag6FUUzcaY5/eAYPTDr6/IHiZI98ATyg8mA7 LEzZ3iWH8+nIww/GJ+USjEqyUzk+JEN2Jg6JaoD4qRUIZa5vGPlNHiibkakKtFq8DuBdWN sIGKg6KZwuXWuLA20QgtI8BzHgXyu28jTJ5reMvN2O6WcQsrI2NpFd6HO9uNl5FUbkOU3Z wah/k0iVDH3RQQpwOEI/ung3IvM9kD+lrowKqF6su1eSVfeugAKB8FN7Y7Isv3u1lW0dAj OMPj0fFm2je40k1TJm0TM9WnPEjlE1sfmNBP4ircvMzUpWHlUybzBZkZoKqHJg== 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=1787703490; 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=osi8q6f/oVYlV838IGSx7uGprz12m/1QJ3ADJpjHq00=; b=LL0xDnozrwo1vF6JI1e4pZqEvFwj/j7GU3FRhoPA3NuLkeoaDrPRNC7VCIPnTGZ57CMbza 4dJo8RR83THL29jLNWkqEK/BsIG+tRAhZcptrJKmDs8k2NcRG8cpRxZ6sVNdB8sH0F+ck1 eu6C/eaw835RgxdvLhV9KFZszCpf0k3Y5TTCVK3xvWCa5snSOdWEDfZpciVEnlfJd5oIu4 jTACrm7bJNNV02dvjGmH+Nma1NisEP6ioeecl5xghAF4Igo56U12EeL3T14USZ/tt3wksV 06KlnDt9ql1SYWSmHhTzlEP+e9+7aHkFbYRex5gQ9iohdLXvrHGaLYCRk5VRDg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hV4xG3MnHz1CMt for ; Wed, 26 Aug 2026 00:18:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3f5a4 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 26 Aug 2026 00:18:05 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Alexander Motin Subject: git: 78376b16a4ba - main - gconcat: Add rotation rate support List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@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: mav X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 78376b16a4ba1eed0f804c493e2c715ccb57b165 Auto-Submitted: auto-generated Date: Wed, 26 Aug 2026 00:18:05 +0000 Message-Id: <6a8e30bd.3f5a4.7373969c@gitrepo.freebsd.org> The branch main has been updated by mav: URL: https://cgit.FreeBSD.org/src/commit/?id=78376b16a4ba1eed0f804c493e2c715ccb57b165 commit 78376b16a4ba1eed0f804c493e2c715ccb57b165 Author: Alexander Motin AuthorDate: 2026-08-26 00:14:11 +0000 Commit: Alexander Motin CommitDate: 2026-08-26 00:14:11 +0000 gconcat: Add rotation rate support If all member devices report the same rotation rate, pass it up. --- sys/geom/concat/g_concat.c | 41 ++++++++++++++++++++++++++++++++++++++++- sys/geom/concat/g_concat.h | 1 + 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/sys/geom/concat/g_concat.c b/sys/geom/concat/g_concat.c index 5461c6dd73d3..8f39eeff5ce2 100644 --- a/sys/geom/concat/g_concat.c +++ b/sys/geom/concat/g_concat.c @@ -39,6 +39,7 @@ #include #include #include +#include #include FEATURE(geom_concat, "GEOM concatenation support"); @@ -228,6 +229,30 @@ g_concat_candelete(struct bio *bp) g_handleattr(bp, "GEOM::candelete", &val, sizeof(val)); } +static void +g_concat_rotation_rate(struct bio *bp) +{ + struct g_concat_softc *sc; + struct g_concat_disk *disk; + uint16_t rr = DISK_RR_UNKNOWN; + bool first = true; + + sc = bp->bio_to->geom->softc; + sx_assert(&sc->sc_disks_lock, SX_LOCKED); + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { + if (disk->d_removed) + continue; + if (first) + rr = disk->d_rotation_rate; + else if (rr != disk->d_rotation_rate) { + rr = DISK_RR_UNKNOWN; + break; + } + first = false; + } + g_handleattr(bp, "GEOM::rotation_rate", &rr, sizeof(rr)); +} + static void g_concat_kernel_dump(struct bio *bp) { @@ -360,6 +385,10 @@ g_concat_start(struct bio *bp) } else if (strcmp("GEOM::candelete", bp->bio_attribute) == 0) { g_concat_candelete(bp); goto end; + } else if (strcmp("GEOM::rotation_rate", + bp->bio_attribute) == 0) { + g_concat_rotation_rate(bp); + goto end; } /* To which provider it should be delivered? */ /* FALLTHROUGH */ @@ -465,6 +494,10 @@ g_concat_check_and_run(struct g_concat_softc *sc) &disk->d_candelete); if (error != 0) disk->d_candelete = 0; + error = g_getattr("GEOM::rotation_rate", + disk->d_consumer, &disk->d_rotation_rate); + if (error != 0) + disk->d_rotation_rate = DISK_RR_UNKNOWN; (void)g_access(disk->d_consumer, -1, 0, 0); } else G_CONCAT_DEBUG(1, "Failed to access disk %s, error %d.", @@ -1060,7 +1093,8 @@ g_concat_ctl_append(struct gctl_req *req, struct g_class *mp) struct g_concat_disk *disk; int *nargs, *hardcode; int error; - int disk_candelete; + int disk_candelete = 0; + uint16_t disk_rotation_rate = DISK_RR_UNKNOWN; g_topology_assert(); @@ -1141,6 +1175,10 @@ g_concat_ctl_append(struct gctl_req *req, struct g_class *mp) error = g_getattr("GEOM::candelete", cp, &disk_candelete); if (error != 0) disk_candelete = 0; + error = g_getattr("GEOM::rotation_rate", cp, + &disk_rotation_rate); + if (error != 0) + disk_rotation_rate = DISK_RR_UNKNOWN; (void)g_access(cp, -1, 0, 0); } else G_CONCAT_DEBUG(1, "Failed to access disk %s, error %d.", name, error); @@ -1162,6 +1200,7 @@ g_concat_ctl_append(struct gctl_req *req, struct g_class *mp) disk->d_start = TAILQ_LAST(&sc->sc_disks, g_concat_disks)->d_end; disk->d_end = disk->d_start + cp->provider->mediasize; disk->d_candelete = disk_candelete; + disk->d_rotation_rate = disk_rotation_rate; disk->d_removed = 0; disk->d_hardcoded = *hardcode; cp->private = disk; diff --git a/sys/geom/concat/g_concat.h b/sys/geom/concat/g_concat.h index 68bfe40ee6a1..702a06c054e0 100644 --- a/sys/geom/concat/g_concat.h +++ b/sys/geom/concat/g_concat.h @@ -59,6 +59,7 @@ struct g_concat_disk { off_t d_start; off_t d_end; int d_candelete; + uint16_t d_rotation_rate; int d_removed; bool d_hardcoded; };