From nobody Sun Apr 12 22:17:11 2026 X-Original-To: dev-commits-src-branches@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 4fv4f00dCsz6Z35r for ; Sun, 12 Apr 2026 22:17:12 +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" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fv4dz71x3z3Cx2 for ; Sun, 12 Apr 2026 22:17:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776032232; 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=+IyaVIyrkvt4YlkGxi0ZocX/ejondicPg+IQKkG0vh4=; b=VO9gkKJwikrwmvabqqALYCNIJDD3axEdZqfemOMe2yM2vvk9OW5FE9DCKN+YXvwCyBGvyJ rbrqbg3gFJ5mVI+wIOhABmsGGa4REBrZBGLC3sP6p6dAm6MO4Sy3XachLLRPKJVDhTdcvL pSj4o+N+ps9EfUiuTN0r/S/GwhDEybOe7jQyuFmE+sg/TDNO8aDja8gRoH0JP7NkwXGSpo He7SGQG2dMsnFoqENsYrSZAQHKHLmF2smFHR8uHo4Svx3bKh+xAHe0KAejSynVakq1QVKJ vtH5JAo/SPFVrmFYKjNLsbBMjkUQfpDkVjMCnKfTvLwhYlNfks4EEi69NKVxWA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1776032232; a=rsa-sha256; cv=none; b=P7WnU2GwTkm+xNzNFx1mQrlaQ1TJxyHDcNjETz4684hno9PbyiCG7MZxPegYOPrNbAIdRS GxLty4bPCCxAOOv1M0BAuZq2FIQKR/mAc51A5+l/+T6U3bl4poqcEjxiaIa+MhMB74qDsn EWtdVWpTzACkzs8Mz4bXwerrRyLzanaqXw9aV+YB+gFPErHapbdtj3zs/EQBKp68teLMcT 1R5TVXH8MIphiFmSGyDR0vL/PhVpWrrznDRoZtG+c6F9GkRG3+IiPuTkyX0Ki4ovoXnvah jXOVi5VhKuolBgJ1d7OnbiEVkMevACYhb2ldkFThwg/1r8RGXn8+T9frnxiDpA== 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=1776032232; 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=+IyaVIyrkvt4YlkGxi0ZocX/ejondicPg+IQKkG0vh4=; b=uKzGSmj7UXGrnqJDLxcdPGATUlbCgTRM6Ly73UhzmAuLM8Ur5NG0OQ/+mdV4UJVOS4b8QO siFy28tG7a9KZe68SfzltHcOq6Y1JvOVrEPXXWDlwA5KApnWAhvGAptp3BZpHxKILOXyhV aCSOGQUUAd4HCE0azkNwfChRynTnUfe9dT7xIL7bfQBvC0wXmRJ6M/3QR7Ixo8Fm3pPt6b 7wNjr2z+r+bRyC6uhwq8F8rVY5id+Rk6AaxVquQ6CRnyB7b8e5dKGk428YdNhj0d1CQV2j SIKJIqoCjVY77FbBsRFWF7A2iKywgY7Tw/dEpVWCm15rYZeuwbx5YEXFs9xHiA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fv4dz6KyfzcZh for ; Sun, 12 Apr 2026 22:17:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 21398 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 12 Apr 2026 22:17:11 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Warner Losh Subject: git: 890adccde076 - stable/14 - gpart: More nuance for GPT support List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@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/stable/14 X-Git-Reftype: branch X-Git-Commit: 890adccde0763536189cc1995e49f753e8d00497 Auto-Submitted: auto-generated Date: Sun, 12 Apr 2026 22:17:11 +0000 Message-Id: <69dc19e7.21398.512d0c97@gitrepo.freebsd.org> The branch stable/14 has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=890adccde0763536189cc1995e49f753e8d00497 commit 890adccde0763536189cc1995e49f753e8d00497 Author: Warner Losh AuthorDate: 2024-10-15 23:15:17 +0000 Commit: Warner Losh CommitDate: 2026-04-12 22:08:16 +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 (cherry picked from commit 09c999b1557a8031d2b60435d71a0a5ed4f0f016) --- 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 10305ee940fe..02c550d74620 100644 --- a/sys/geom/part/g_part.c +++ b/sys/geom/part/g_part.c @@ -1006,7 +1006,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 9ee48168b1e8..5f9cb64eab02 100644 --- a/sys/geom/part/g_part_apm.c +++ b/sys/geom/part/g_part_apm.c @@ -102,6 +102,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 625cdb4c727e..d1bee3f6c5e9 100644 --- a/sys/geom/part/g_part_bsd.c +++ b/sys/geom/part/g_part_bsd.c @@ -107,6 +107,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 4a1481f97c3e..14f8d0cde476 100644 --- a/sys/geom/part/g_part_bsd64.c +++ b/sys/geom/part/g_part_bsd64.c @@ -161,6 +161,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 6be64f58287c..9c1a46111b16 100644 --- a/sys/geom/part/g_part_ebr.c +++ b/sys/geom/part/g_part_ebr.c @@ -125,6 +125,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 d795ccf4332b..de22d385af41 100644 --- a/sys/geom/part/g_part_gpt.c +++ b/sys/geom/part/g_part_gpt.c @@ -155,7 +155,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 36862c8ff018..e0e764bbaae9 100644 --- a/sys/geom/part/g_part_mbr.c +++ b/sys/geom/part/g_part_mbr.c @@ -116,6 +116,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, };