From nobody Wed Apr 06 02:45:22 2022 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 061321A807EE; Wed, 6 Apr 2022 02:45:24 +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 4KY84z0VZLz4ZXc; Wed, 6 Apr 2022 02:45:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1649213123; 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=WGv3Cd/2pSmCvmfUDfKcoHZhjDnLsjtEFVRlFKw5yrE=; b=vw6c7Z5qIYjuWJxFpj91zbsrMUOKw4YqnsYsxYj4bYpvFGzUvfeEOOhh7YdOg2rFeNjVV8 WBMURgDopewBf67tmMub3dE2wOtrQNg1ZJx8LidYoWloSi0LnkHe9T/1eBP6jjzHWaXxlX R6GpG7geVSob0tq1bZNwJIRZV85Bu13L0nm6EFu5axskZH9RHYMxQk44wxFs8qwNGSSCnS gOUKktzGFZQTwTAndEGKJrpL7+yzKIlVpGpnw5PuQC9RO/0MlT/Mxy0tPotL92NxzGLCUO /BypPFG3SiqDfw3/jeJUBYB5Fq0cTZQDgPt9qo0CSDUA1jp9Jrly5RfTr1eQHw== 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 6176212E23; Wed, 6 Apr 2022 02:45:22 +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 2362jMvE006543; Wed, 6 Apr 2022 02:45:22 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 2362jMVn006542; Wed, 6 Apr 2022 02:45:22 GMT (envelope-from git) Date: Wed, 6 Apr 2022 02:45:22 GMT Message-Id: <202204060245.2362jMVn006542@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Alexander Motin Subject: git: e3b3dfa77964 - stable/13 - gpart: Avoid geom_gettree() call in "bootcode -b". 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: mav X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: e3b3dfa77964b235a768534c174a54df03080096 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1649213123; 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=WGv3Cd/2pSmCvmfUDfKcoHZhjDnLsjtEFVRlFKw5yrE=; b=iqZ8anu98fbKUJE6Fz6WYcjxdDnfSwScrXLLKWJYC7ViwtqMkwLOk8Uc9uxLsDxJ4X7C1I neleS/el365nqOTXCs04Wh3fZYk0AvsSQGcjWGvhU53jocLY+zoE6LeS4H0mKEe9XhwV9h Fx0EKhM3pJHeIVASKilQ82s94UYHr7w3M5E+o+6kGfabsRHemhFL0g4zODLYEqhO2weFtU AABP/wA47MImK/zFOe0bVqEjBZ0z2xOaZ3SSlffqwOUppt9gwgykXl0frzqMKxrY31Iy4J nEOKsIOv0OYFsTyK12ww1kAYjPHiUe6CyG0YmHv956INqNmyBjyTWrqUT4rpeg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1649213123; a=rsa-sha256; cv=none; b=ZjZtCe5SkpivEKXH0hoBBXeQyDfewgTOdUPk6BIVpGEf6M7E1uKCGmxUDts8aXUFM2dzbV TKY/f3xl1AuD4Pm25aiyn/ULAH1k4RyhyYy/Lckp95Yopb1MFeG9LuyRf0++H+lFjBC/Fv NzQxWWd3avktTnnsxh3AqPx7qcwmjgnmaLAEcjPWFt1R6jzghMGdpqDiUVaf1rEbCQqmOS XVbTShCeapySw/JwW4RNqTbI3eV0jTkkDprFxWi9iGP5ZEmGVBb0WLfBrgFzjlLoghen41 WKnQ8N8XWLHiWBGs8Pagml0L2wX0D2tmeMT+TPUeVWJFj6pasA3eukEAK6/jfg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by mav: URL: https://cgit.FreeBSD.org/src/commit/?id=e3b3dfa77964b235a768534c174a54df03080096 commit e3b3dfa77964b235a768534c174a54df03080096 Author: Alexander Motin AuthorDate: 2022-03-08 18:44:22 +0000 Commit: Alexander Motin CommitDate: 2022-04-06 02:07:40 +0000 gpart: Avoid geom_gettree() call in "bootcode -b". geom_gettree() may be pretty expensive on large systems, and it is not needed if only -b flag specified, that is processed by kernel. MFC after: 1 month (cherry picked from commit 5c20bfc78706d2fe6e262ddb55af0a8b928d3835) --- lib/geom/part/geom_part.c | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/lib/geom/part/geom_part.c b/lib/geom/part/geom_part.c index 41131646e246..330a4708251d 100644 --- a/lib/geom/part/geom_part.c +++ b/lib/geom/part/geom_part.c @@ -1217,6 +1217,14 @@ gpart_bootcode(struct gctl_req *req, unsigned int fl) } else bootcode = NULL; + if (!gctl_has_param(req, GPART_PARAM_PARTCODE)) { + if (bootcode == NULL) + errx(EXIT_FAILURE, "neither -b nor -p specified"); + if (gctl_has_param(req, GPART_PARAM_INDEX)) + errx(EXIT_FAILURE, "-i is only valid with -p"); + goto nopartcode; + } + s = gctl_get_ascii(req, "class"); if (s == NULL) abort(); @@ -1244,22 +1252,7 @@ gpart_bootcode(struct gctl_req *req, unsigned int fl) else vtoc8 = 0; - if (gctl_has_param(req, GPART_PARAM_PARTCODE)) { - s = gctl_get_ascii(req, GPART_PARAM_PARTCODE); - if (vtoc8 != 0) - partsize = VTOC_BOOTSIZE; - else - partsize = 1024 * 1024; /* Arbitrary limit. */ - partcode = gpart_bootfile_read(s, &partsize); - error = gctl_delete_param(req, GPART_PARAM_PARTCODE); - if (error) - errc(EXIT_FAILURE, error, "internal error"); - } else - partcode = NULL; - if (gctl_has_param(req, GPART_PARAM_INDEX)) { - if (partcode == NULL) - errx(EXIT_FAILURE, "-i is only valid with -p"); idx = (int)gctl_get_intmax(req, GPART_PARAM_INDEX); if (idx < 1) errx(EXIT_FAILURE, "invalid partition index"); @@ -1269,7 +1262,16 @@ gpart_bootcode(struct gctl_req *req, unsigned int fl) } else idx = 0; - if (partcode != NULL) { + if (gctl_has_param(req, GPART_PARAM_PARTCODE)) { + s = gctl_get_ascii(req, GPART_PARAM_PARTCODE); + if (vtoc8 != 0) + partsize = VTOC_BOOTSIZE; + else + partsize = 1024 * 1024; /* Arbitrary limit. */ + partcode = gpart_bootfile_read(s, &partsize); + error = gctl_delete_param(req, GPART_PARAM_PARTCODE); + if (error) + errc(EXIT_FAILURE, error, "internal error"); if (vtoc8 == 0) { if (idx == 0) errx(EXIT_FAILURE, "missing -i option"); @@ -1279,15 +1281,14 @@ gpart_bootcode(struct gctl_req *req, unsigned int fl) errx(EXIT_FAILURE, "invalid bootcode"); gpart_write_partcode_vtoc8(gp, idx, partcode); } - } else - if (bootcode == NULL) - errx(EXIT_FAILURE, "no -b nor -p"); + free(partcode); + } + geom_deletetree(&mesh); + +nopartcode: if (bootcode != NULL) gpart_issue(req, fl); - - geom_deletetree(&mesh); - free(partcode); } static void