From nobody Wed Aug 26 00:18:05 2026 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 4hV4x94fSSz6qHQ5 for ; Wed, 26 Aug 2026 00:18:05 +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 4hV4x93c2Gz3lNs for ; Wed, 26 Aug 2026 00:18:05 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787703485; 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=F4TngAXT4QrwmuIcAeprqGR50neS+wMRLaCdDY8I2kUwmOZLAs5VTvGr+XjEk04Xd/+7XN JNJ3AhF/BiCnNSXF6+7h5kpkz/bqPnNq7nPq/XBDSrkK6dQ3Om4QbiRx6hhlZuXiRtvDgK ND6If7KVlbIPCmTr55aHkwGvvD9sELu7iOZ/r0KFJyVbn9OeuRxs+VngC/kQHuRf5Rc8nh W4IZcgJxShUdINtEPzX8BYo4l+gTbbfVgh08o4ssk+RKx7/Dbba6bsUJvZDqtCB6yuJ6W8 ZjBG+9dSWu3G5T/g/p5xCHKCmluCUy7CKbtYJzLOzmVB8KJ7s1KM06iMrJxLzw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1787703485; a=rsa-sha256; cv=none; b=nCnuYtJpm04gezD00VlDJQi1r9GTQsRqeUEzz+5O951hqW3UBboYNs3TOsQfpeoOVBPRaK UJCEX6E2MC7GYmPsf4s4bjoDU2qzCi8oRSF+ypTq9xSNYdIj5BOwtWbzbqLql0iQuYUxBL dyzW13AXKxXRyxE5JP34BnxlDL+sXKmYmCpQudKRdvhZNmWZ2IpmtSM1vQWI8FHQUsieQz ul9izgIFazuN20qTp46NDJs6qdFTWHmTeQlK0nz7IjG7CNxFD8IQItvIqpFsrPSON2dvHr 83R/T8V2JOOo7B1ayzB70Z3nrthDBwwwvF8+aQlkIMzQ0CVqE9v2CS+yn82zfw== 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=1787703485; 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=GRDOmqYg7Llww3XRE6h39UQUN8LfbkZkFogS+dfLXH/L95G9OVyTVoz4YmGWAPtfmL9CEa A4VSbL27HcKDBNh4RUy9LztZB5XpQjva54zF5RsPpeUIkGeFLk7sgJ4yjhGFPGwUHgBWz3 KW0U/IzupqV6nKcnmT2kWn0uDZGC+K+wiYS19nRkxxcqy/bkg736uPUPt5kM7stw+J5NhL dIXsr00xg6JRuUZ+OLr70THTMyrvwUdorLNYPI8Ds4qFzCs7zv0VWSatCqR5lnuBVTmVrj /P2Vj9YsScpgWPSAHUFov1jnI7zQ5SNdXDFL7cjhSHVOpLdQOsWv0KMQIJzYDw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hV4x91zNRz59 for ; Wed, 26 Aug 2026 00:18:05 +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 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 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; };