From nobody Tue Oct 15 23:15:18 2024 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 4XSqh63JHkz5Z82t; Tue, 15 Oct 2024 23:15:18 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4XSqh61FmQz42Z9; Tue, 15 Oct 2024 23:15:18 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1729034118; 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=nAQpBxZyy5YQ9VmmcfWvL2X8+ATE6Axy958qxXPiML0=; b=v6kAgygoBAP8R5e8kaXw1zNASa3+YTlEb07l6xMO7lxLekH+XZVVLH7TS1etyRYt8wJE0p aow1UpqLfLhmfAi3H66g1k0a3fAsED16VsnHc/IUto5EqXUZm/a1wr0GfbAddCHY5jDX2C Y4CBOL9Aidl4WLMHvoCJ89ruEcpL48F9F5g2UE7eIW63sE04cEvlpfsqbRCF/Dj0nlqa2N JD3HrOpT2ZpPda45YRa+a2LFoSvbl/At20/AWENGjAa5zobOJmcZ67a89tz6UE4dS9+dT5 xeIuPY9MvpIs+35fuRu+Ly6GDVXDxbt2irg973AtIUhvq5An2QlFjhZe4dq2FA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1729034118; 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=nAQpBxZyy5YQ9VmmcfWvL2X8+ATE6Axy958qxXPiML0=; b=UV8VWrZD4EvKGD7LdkjuSigTLbmpLlAqV+jJJ3JzZiAUcLjiuX8P0JN5LxsmmvjpBfOE0P 8y9M5nkuwcH3dGghyCB5Zb7Nz2lHdCCK4GmaW7upJLhEHfQTx/0mEbN0kzC6zmLbw01nUd QQL4IyFnQEerOqmxNE4xCdlcgqBo4SiUHUdYGXQOj33EuH4VsZ3kcINm2KlqNAZulyA8hN jMjBfBogu1lOPM6O73hxFa+RjwsCrLkFbb9Bpc9NegyiBed3RgMYISH/almVOBrnQUgiTi 5iYNILzGUJKSzAiq34I3c0Cb9GgHCofDV8OfTCrX1C+lNWydPl3Hmz6aVah1uA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1729034118; a=rsa-sha256; cv=none; b=BxdSsRilUFP2eLfrVG88+UGUdlzA4SU8DP/pDGHDiLC/Sr5uESrbwP0x7WHmLuoEiSZMR8 MMwkJt7P3LrYQ30w5/dj77+oa/XwqdYgJ6uMU5IB6Y5Nw9oi7U4ZQ5e13EVqdVT5+LLYnL nPqUrgxpKi1JWBGCjyIL9jfJ2Nbq/xyqoWCVxMboOt/xW2yCk+OuOG00Nb23vPvZf/wl9t V0aHmMv5sNS29N8orgNFBz3FXaAOZKQH8eYn0hlPeQe5uqAHgLjl4Tad21zeYzN1uKZrWD ZVkdNm7v/5R4Ru07kn6E/4+bnVOUfLpfJgND523oHcxiyHj1wyl9+Qf36TazPg== 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 4XSqh60s3bzhNS; Tue, 15 Oct 2024 23:15:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 49FNFIOa024748; Tue, 15 Oct 2024 23:15:18 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 49FNFIYD024745; Tue, 15 Oct 2024 23:15:18 GMT (envelope-from git) Date: Tue, 15 Oct 2024 23:15:18 GMT Message-Id: <202410152315.49FNFIYD024745@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: 09c999b1557a - main - gpart: More nuance for GPT 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 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: 09c999b1557a8031d2b60435d71a0a5ed4f0f016 Auto-Submitted: auto-generated The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=09c999b1557a8031d2b60435d71a0a5ed4f0f016 commit 09c999b1557a8031d2b60435d71a0a5ed4f0f016 Author: Warner Losh AuthorDate: 2024-10-15 23:15:17 +0000 Commit: Warner Losh CommitDate: 2024-10-15 23:15:17 +0000 gpart: More nuance for GPT support A careful reading of the GPT standard shows that one may have fewer than 128 entries in your GPT table. While the standard requires that we reserve enough space (32 512-byte-LBAs or 4 4096-byte-LBAs), it also explicitly allows one to specify fewer actual partitions (since that controls what is in the CRC). It requires that the first LBA to be 32 (512 sectors) or 6 (4k sectors) or larger. That requirement is not enforced (it's not listed as one of validation criteria for the GPT). We should likely do so in the future. To that end, allow a default number of entries to use (defent) on creation to be different (larger) than the minimum number of legal entries. For gpt, these numbers work out to 128 and 1 respectively. For all the others, make minent == defent so this is a nop for those partitioning schemes. Sponsored by: Netflix Reviewed by: zlei, emaste Differential Revision: https://reviews.freebsd.org/D42246 --- sys/geom/part/g_part.c | 2 +- sys/geom/part/g_part.h | 5 +++-- sys/geom/part/g_part_apm.c | 1 + sys/geom/part/g_part_bsd.c | 1 + sys/geom/part/g_part_bsd64.c | 1 + sys/geom/part/g_part_ebr.c | 1 + sys/geom/part/g_part_gpt.c | 3 ++- sys/geom/part/g_part_mbr.c | 1 + 8 files changed, 11 insertions(+), 4 deletions(-) diff --git a/sys/geom/part/g_part.c b/sys/geom/part/g_part.c index d72efa09c46d..41125f6478ac 100644 --- a/sys/geom/part/g_part.c +++ b/sys/geom/part/g_part.c @@ -1005,7 +1005,7 @@ g_part_ctl_create(struct gctl_req *req, struct g_part_parms *gpp) table->gpt_gp = gp; table->gpt_scheme = gpp->gpp_scheme; table->gpt_entries = (gpp->gpp_parms & G_PART_PARM_ENTRIES) ? - gpp->gpp_entries : scheme->gps_minent; + gpp->gpp_entries : scheme->gps_defent; LIST_INIT(&table->gpt_entry); if (null == NULL) { cp = g_new_consumer(gp); diff --git a/sys/geom/part/g_part.h b/sys/geom/part/g_part.h index 13bbb1e4126a..575d97623e9b 100644 --- a/sys/geom/part/g_part.h +++ b/sys/geom/part/g_part.h @@ -118,8 +118,9 @@ const char *g_part_alias_name(enum g_part_alias); struct g_part_scheme { KOBJ_CLASS_FIELDS; size_t gps_entrysz; - int gps_minent; - int gps_maxent; + int gps_minent; /* Minimum number of entries possible */ + int gps_defent; /* Default number of entries to create */ + int gps_maxent; /* Maximum number of entries possible */ int gps_bootcodesz; TAILQ_ENTRY(g_part_scheme) scheme_list; }; diff --git a/sys/geom/part/g_part_apm.c b/sys/geom/part/g_part_apm.c index 9c0bb189cc69..c6e40495509c 100644 --- a/sys/geom/part/g_part_apm.c +++ b/sys/geom/part/g_part_apm.c @@ -101,6 +101,7 @@ static struct g_part_scheme g_part_apm_scheme = { sizeof(struct g_part_apm_table), .gps_entrysz = sizeof(struct g_part_apm_entry), .gps_minent = 16, + .gps_defent = 16, .gps_maxent = 4096, }; G_PART_SCHEME_DECLARE(g_part_apm); diff --git a/sys/geom/part/g_part_bsd.c b/sys/geom/part/g_part_bsd.c index 2ff8566103d8..d6d1b7346d9b 100644 --- a/sys/geom/part/g_part_bsd.c +++ b/sys/geom/part/g_part_bsd.c @@ -106,6 +106,7 @@ static struct g_part_scheme g_part_bsd_scheme = { sizeof(struct g_part_bsd_table), .gps_entrysz = sizeof(struct g_part_bsd_entry), .gps_minent = 8, + .gps_defent = 8, .gps_maxent = 20, /* Only 22 entries fit in 512 byte sectors */ .gps_bootcodesz = BBSIZE, }; diff --git a/sys/geom/part/g_part_bsd64.c b/sys/geom/part/g_part_bsd64.c index 74e370243c3c..4339a988b4ba 100644 --- a/sys/geom/part/g_part_bsd64.c +++ b/sys/geom/part/g_part_bsd64.c @@ -160,6 +160,7 @@ static struct g_part_scheme g_part_bsd64_scheme = { sizeof(struct g_part_bsd64_table), .gps_entrysz = sizeof(struct g_part_bsd64_entry), .gps_minent = MAXPARTITIONS64, + .gps_defent = MAXPARTITIONS64, .gps_maxent = MAXPARTITIONS64 }; G_PART_SCHEME_DECLARE(g_part_bsd64); diff --git a/sys/geom/part/g_part_ebr.c b/sys/geom/part/g_part_ebr.c index 82411e60dcd4..01819636fe8a 100644 --- a/sys/geom/part/g_part_ebr.c +++ b/sys/geom/part/g_part_ebr.c @@ -124,6 +124,7 @@ static struct g_part_scheme g_part_ebr_scheme = { sizeof(struct g_part_ebr_table), .gps_entrysz = sizeof(struct g_part_ebr_entry), .gps_minent = 1, + .gps_defent = 1, .gps_maxent = INT_MAX, }; G_PART_SCHEME_DECLARE(g_part_ebr); diff --git a/sys/geom/part/g_part_gpt.c b/sys/geom/part/g_part_gpt.c index a856a34f99d9..022337bd6575 100644 --- a/sys/geom/part/g_part_gpt.c +++ b/sys/geom/part/g_part_gpt.c @@ -154,7 +154,8 @@ static struct g_part_scheme g_part_gpt_scheme = { g_part_gpt_methods, sizeof(struct g_part_gpt_table), .gps_entrysz = sizeof(struct g_part_gpt_entry), - .gps_minent = 128, + .gps_minent = 1, + .gps_defent = 128, .gps_maxent = 4096, .gps_bootcodesz = MBRSIZE, }; diff --git a/sys/geom/part/g_part_mbr.c b/sys/geom/part/g_part_mbr.c index dfd55dae139f..7d44b9e03c8d 100644 --- a/sys/geom/part/g_part_mbr.c +++ b/sys/geom/part/g_part_mbr.c @@ -115,6 +115,7 @@ static struct g_part_scheme g_part_mbr_scheme = { sizeof(struct g_part_mbr_table), .gps_entrysz = sizeof(struct g_part_mbr_entry), .gps_minent = NDOSPART, + .gps_defent = NDOSPART, .gps_maxent = NDOSPART, .gps_bootcodesz = MBRSIZE, };