From nobody Mon Apr 10 16:28:13 2023 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 4PwDt5540nz44Rl8; Mon, 10 Apr 2023 16:28:13 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4PwDt53ZsJz3Nmk; Mon, 10 Apr 2023 16:28:13 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1681144093; 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=AwrXtqPZSJPerEWe1XozZzM2jUUJkQxKrfSI/mvjidk=; b=Sjjf0tq74mFH+CYeXhXyT+pn2nZj+DXBw5rNKsZMuoQaYZLt2shdnKMieKNCufeYWX7BHI 2Dp9jNO4CTCFlY2XK9fAELLMzmaIzlGHsJWq3eMWAD02X3n53zxbq8l0P7ccBTelL+B9Hd 8xQQa9vdLBLnb9p6LTu+bhWLkWJ/BFbd9BQQnF5RU+/AFA1AZlHfjBFwcweKTMrhlnEWcx 4jXSDpd+kkGpwjvVo6/lbwik3XjaCiL7C2l7e1FwaDcvl3kE+2LlGyw4o879p7hHBkj/Px G/Q/CioH0tYTT+L5AIKFAlBBDsqImqG8DRf0PLxpofqcIU6V3lB3ZqgJOO6y5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1681144093; 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=AwrXtqPZSJPerEWe1XozZzM2jUUJkQxKrfSI/mvjidk=; b=b4/TQCJ44iRVQ9RHr2GXi2dROmLhoZFybowhoYw+Fbgb1UOrAntamkGTY+DMzl94ATtvlC bTeyJALsr/EqtqCNZdoZZrp+KBF09jQQ+1F9v1YJhw4qSKdivy30s+gZlsSvFGlARcV+WL SeEf/TOoU0qIcOAuR0OEUg1o30UpCErCAwZ1iflsxarEIz6+5fIVtSyQTVyoUW+xCBLv8m ZVxF7VhmxthuVXDHKMMkc1qt/QUdvfUGkQPc+XlpTuGaOXc3MaAyw7a3xWsxIdjDxJ81yT ROVRWeJ9ii83mrh3DfpbNfcTrhywoRuvVowNdFmvGIoTN5ES+XUacBrw7N9Gnw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1681144093; a=rsa-sha256; cv=none; b=wih0ITlR75Vdu013MH2z3q4196ppGrrSrcMs5/oaU0eupk6dYvnAwR10XbTw12Tyz2rtM3 d2129DvHmxNk5JdhWB6R5JBHi/C4hHL3we16SxdR3YOzwBGjNaceaG7rfWCGjvwctTojiH ead3gE7UQqpaxG/i/IP2iIeA5dEc1TNGZvXFHySWDaj65P6bQpS5r969UubQcYivRwmMY3 J5l5sEk1HLxLpnSjQuB1OGdprKAm0sSGKrBFTEFKhDg0ro2RMTf7fLs91+HhJVrBop/tid jNc8tyQmaWmceLYz/7BPngIC7GEGzzVTqzXSiVRO/vO+mcXu41vzXvIftHNhSA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4PwDt52YJFzxDJ; Mon, 10 Apr 2023 16:28:13 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 33AGSDm1042400; Mon, 10 Apr 2023 16:28:13 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 33AGSDtV042399; Mon, 10 Apr 2023 16:28:13 GMT (envelope-from git) Date: Mon, 10 Apr 2023 16:28:13 GMT Message-Id: <202304101628.33AGSDtV042399@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Alan Somers Subject: git: 9309a460b23a - main - Implement GEOM::rotation_rate for gmirror 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: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: asomers X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 9309a460b23a8cda8d47c5f775da7fc6472d9925 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by asomers: URL: https://cgit.FreeBSD.org/src/commit/?id=9309a460b23a8cda8d47c5f775da7fc6472d9925 commit 9309a460b23a8cda8d47c5f775da7fc6472d9925 Author: Alan Somers AuthorDate: 2023-04-07 16:07:50 +0000 Commit: Alan Somers CommitDate: 2023-04-10 16:27:10 +0000 Implement GEOM::rotation_rate for gmirror If all of the mirror's children have the same rotation rate, report that. But if they have mixed rotation rates, or if any child has an unknown rotation rate, report "Unknown". MFC after: 2 weeks Sponsored by: Axcient Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D39458 --- sys/geom/mirror/g_mirror.c | 29 +++++++++++++++++++++++++++++ sys/geom/mirror/g_mirror.h | 1 + 2 files changed, 30 insertions(+) diff --git a/sys/geom/mirror/g_mirror.c b/sys/geom/mirror/g_mirror.c index 94e615c8038d..9153345cc7e2 100644 --- a/sys/geom/mirror/g_mirror.c +++ b/sys/geom/mirror/g_mirror.c @@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include FEATURE(geom_mirror, "GEOM mirroring support"); @@ -479,6 +480,10 @@ g_mirror_init_disk(struct g_mirror_softc *sc, struct g_provider *pp, error = g_getattr("GEOM::candelete", disk->d_consumer, &i); if (error == 0 && i != 0) disk->d_flags |= G_MIRROR_DISK_FLAG_CANDELETE; + error = g_getattr("GEOM::rotation_rate", disk->d_consumer, + &disk->d_rotation_rate); + if (error) + disk->d_rotation_rate = DISK_RR_UNKNOWN; if (md->md_provider[0] != '\0') disk->d_flags |= G_MIRROR_DISK_FLAG_HARDCODED; disk->d_sync.ds_consumer = NULL; @@ -1147,6 +1152,27 @@ g_mirror_kernel_dump(struct bio *bp) g_mirror_get_diskname(disk)); } +static void +g_mirror_rotation_rate(struct bio *bp) +{ + struct g_mirror_softc *sc; + struct g_mirror_disk *disk; + bool first = true; + uint16_t rr = DISK_RR_UNKNOWN; + + sc = bp->bio_to->private; + LIST_FOREACH(disk, &sc->sc_disks, d_next) { + 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_mirror_start(struct bio *bp) { @@ -1176,6 +1202,9 @@ g_mirror_start(struct bio *bp) } else if (strcmp("GEOM::kerneldump", bp->bio_attribute) == 0) { g_mirror_kernel_dump(bp); return; + } else if (!strcmp(bp->bio_attribute, "GEOM::rotation_rate")) { + g_mirror_rotation_rate(bp); + return; } /* FALLTHROUGH */ default: diff --git a/sys/geom/mirror/g_mirror.h b/sys/geom/mirror/g_mirror.h index 7cec94adae18..09436ec164e6 100644 --- a/sys/geom/mirror/g_mirror.h +++ b/sys/geom/mirror/g_mirror.h @@ -139,6 +139,7 @@ struct g_mirror_disk { u_int d_init_ndisks; /* Initial number of mirror components */ uint32_t d_init_slice; /* Initial slice size */ uint8_t d_init_balance;/* Initial balance */ + uint16_t d_rotation_rate;/* Disk's rotation rate */ uint64_t d_init_mediasize;/* Initial mediasize */ }; #define d_name d_consumer->provider->name