From nobody Thu Oct 26 21:38:19 2023 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 4SGfL417v0z4yJxr; Thu, 26 Oct 2023 21:38:20 +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 4SGfL375jTz3bCn; Thu, 26 Oct 2023 21:38:19 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1698356300; 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=f5/ZStNOU3IE4GlaZvGT0QXl2/RKpN7Zkt6wOTVAdX4=; b=ndtGRM1UJY+/GX3/+yB/1HXtNWzIyIDCp2yVar/ruCOPd6m6hX0fTZiYbPS3MOu0SOu83M 8FMvaxYmcmOLZuI1iTi70LDtj4Bmzqv2rmQk/q5CElUL3aqdfxNg6xSrbKeeZiMw5egrHn Kz5uoyHptMENDiS8kH82iOkPiL8JJrAMevfUmvzJXVNe4gr9V5OCBCSJ5ihL7uYtS3mvqq 1EfrWJXBrTtzEAoFvuq7bkBb2uN26o+L2LBnJxAgLiGbAkdrBpSnR3BEe4FMGmUo7HaXyN XwVY1rsfBun2AYD+jMSN5/w7931U0yMvfcyIJBHSBVwhy42Oa2rWQ4A8azH3gg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1698356300; 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=f5/ZStNOU3IE4GlaZvGT0QXl2/RKpN7Zkt6wOTVAdX4=; b=IILQnS8JWbC/SvFXIjP5tTFaFVtppEOFSlOIkbzkZrDEeJUSWzBRc3JcGPiLTwC39ETSUP yz64oEUK5qDFd69icWYj5jua7nNIGtwekmvybbprNnrzSZ7OhIyaL3OUGXF3D8S01uEOLw bNL6T8lxNbz2REFFPnO6EqOPqOEPTV7eH99byHTfDusqdq8qkUrlDnvwt6adQ9OM8BAC6q /UjtYmxUr9qt5/bp2DLV5hcwECcQZ+J804wDnFPdtexjfqmrWHOulN3gWJJ1NHGlbFMFEK tl7bnzV7UhaFUEhmIgEhTQBS89dF+J9FobTDax6WunO8xnmAAvDQ0P7ZZqiYnQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1698356300; a=rsa-sha256; cv=none; b=mf8PLtbNzAk6M1f5s/KcwaxaJLtaW07F4khBg5HTwhea3DzevF3HxHoebt2C67uCxVsEh8 uVc55bMelXTZEx+HpSr13CA0J+cfgwfpaQt5+4KTWOdTE8vnYhi0VOgyvTrz3xTG4sFTnG lCGDa/U+vdG0GCyr/eNjkdaxoIGUCBZpHdszdLv0srB5G7ITOExToODrGmDU2gmVjp6Pen dNra0F41eg+IGMTBOADUdJwIAbrgU2RPB2g0MtuQEW9pBsbFOPSxNSLXBgMUlCThMVLqVF 169UwF57xTEFOUVy99JttJ2zPXFNCm4LhMW9hPBJQf+if2TWezTyP4JpS1++Ew== 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 4SGfL3691hznM3; Thu, 26 Oct 2023 21:38:19 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 39QLcJCj092082; Thu, 26 Oct 2023 21:38:19 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 39QLcJiV092079; Thu, 26 Oct 2023 21:38:19 GMT (envelope-from git) Date: Thu, 26 Oct 2023 21:38:19 GMT Message-Id: <202310262138.39QLcJiV092079@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Warner Losh Subject: git: 859d674e1745 - stable/14 - gpart: Be less picky about GPT Tables in some cases 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: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: 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: 859d674e1745d0a37c9c8d77e21a3fadd713ef49 Auto-Submitted: auto-generated The branch stable/14 has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=859d674e1745d0a37c9c8d77e21a3fadd713ef49 commit 859d674e1745d0a37c9c8d77e21a3fadd713ef49 Author: Warner Losh AuthorDate: 2023-10-26 16:14:54 +0000 Commit: Warner Losh CommitDate: 2023-10-26 21:34:25 +0000 gpart: Be less picky about GPT Tables in some cases When we're recoverying a damangae GPT, or when we're restoring a backed up partition tables, don't enforce the 4k alignment for start/end LBAs. This is useful for 512e/4kn drives when we're creating a new partition table or partition. However, when we're trying to fix / restore an old partition, we shouldn't force this alignment, since in that case it's more important to use the partition table as is than to optimize performance by rounding (which isn't required by the standard). MFC After: 1 week (pushed more quickly per re@) Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D42359 (cherry picked from commit 5c9f0f72f47ea5315e5147185e47c2efca2e8c85) --- sys/geom/part/g_part_gpt.c | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/sys/geom/part/g_part_gpt.c b/sys/geom/part/g_part_gpt.c index 990ace4a25d4..c4cc840f583d 100644 --- a/sys/geom/part/g_part_gpt.c +++ b/sys/geom/part/g_part_gpt.c @@ -103,7 +103,8 @@ struct g_part_gpt_entry { static void g_gpt_printf_utf16(struct sbuf *, uint16_t *, size_t); static void g_gpt_utf8_to_utf16(const uint8_t *, uint16_t *, size_t); -static void g_gpt_set_defaults(struct g_part_table *, struct g_provider *); +static void g_gpt_set_defaults(struct g_part_table *, struct g_provider *, + struct g_part_parms *); static int g_part_gpt_add(struct g_part_table *, struct g_part_entry *, struct g_part_parms *); @@ -717,7 +718,7 @@ g_part_gpt_create(struct g_part_table *basetable, struct g_part_parms *gpp) table->hdr->hdr_entries = basetable->gpt_entries; table->hdr->hdr_entsz = sizeof(struct gpt_ent); - g_gpt_set_defaults(basetable, pp); + g_gpt_set_defaults(basetable, pp, gpp); return (0); } @@ -1083,7 +1084,7 @@ g_part_gpt_recover(struct g_part_table *basetable) table = (struct g_part_gpt_table *)basetable; pp = LIST_FIRST(&basetable->gpt_gp->consumer)->provider; gpt_create_pmbr(table, pp); - g_gpt_set_defaults(basetable, pp); + g_gpt_set_defaults(basetable, pp, NULL); basetable->gpt_corrupt = 0; return (0); } @@ -1300,7 +1301,8 @@ g_part_gpt_write(struct g_part_table *basetable, struct g_consumer *cp) } static void -g_gpt_set_defaults(struct g_part_table *basetable, struct g_provider *pp) +g_gpt_set_defaults(struct g_part_table *basetable, struct g_provider *pp, + struct g_part_parms *gpp) { struct g_part_entry *baseentry; struct g_part_gpt_entry *entry; @@ -1334,14 +1336,29 @@ g_gpt_set_defaults(struct g_part_table *basetable, struct g_provider *pp) if (entry->ent.ent_lba_end > max) max = entry->ent.ent_lba_end; } - spb = 4096 / pp->sectorsize; - if (spb > 1) { - lba = start + ((start % spb) ? spb - start % spb : 0); - if (lba <= min) - start = lba; - lba = end - (end + 1) % spb; - if (max <= lba) - end = lba; + /* + * Don't force alignment of any kind whatsoever on resize, restore or + * recover. resize doesn't go through this path, recover has a NULL gpp + * and restore has flags == restore (maybe with an appended 'C' to + * commit the operation). For these operations, we have to trust the + * user knows what they are doing. + * + * Otherwise it some flavor of creation of a new partition, so we align + * to a 4k offset on the drive, to make 512e/4kn drives more performant + * by default. + */ + if (gpp == NULL || + (gpp->gpp_parms & G_PART_PARM_FLAGS) == 0 || + strstr(gpp->gpp_flags, "restore") == NULL) { + spb = 4096 / pp->sectorsize; + if (spb > 1) { + lba = start + ((start % spb) ? spb - start % spb : 0); + if (lba <= min) + start = lba; + lba = end - (end + 1) % spb; + if (max <= lba) + end = lba; + } } table->hdr->hdr_lba_start = start; table->hdr->hdr_lba_end = end;