From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1mAURO-0006J0-Iy for mharc-grub-devel@gnu.org; Mon, 02 Aug 2021 05:41:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57412) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mAURM-0006Ir-RW for grub-devel@gnu.org; Mon, 02 Aug 2021 05:40:56 -0400 Received: from de-smtp-delivery-102.mimecast.com ([194.104.111.102]:34271) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mAURK-0002c1-Pu for grub-devel@gnu.org; Mon, 02 Aug 2021 05:40:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1627897250; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=BSynaShWgpWJ7djXdo0uCRujd2xviNjpDWwnGg+ov9k=; b=hRhkHLama36JB37TYuWhSvsxDZJWDCc8VirLNl76nV9VhhH80WnUuCr9F+3D0iKOx15IJp ZfLEvm8bgTP96caeMFgPNsVy4CoLaH1mItB8e9906vuJiaTV0Q+s4I2zHucA9Ddw3LXji5 aIiBytP2l8wljRFqD9pn9H2BAe3tMbk= Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-am5eur02lp2051.outbound.protection.outlook.com [104.47.4.51]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-30-ZUwfdeGVMqG9wWxnj4FMPA-1; Mon, 02 Aug 2021 11:40:49 +0200 X-MC-Unique: ZUwfdeGVMqG9wWxnj4FMPA-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BF8G9WQ+8Pu7z4Lcf9c9P/9oBCZzIy+Sz3yuplRUPko8p3yDl7IdBSidoZfeWtazdBPGNeeNe4TRm4uKpWm5pTEw2/msfAOaXJIji6QZ2D6BJ1dOzvxrqZNlyvXEIcIZVaKsTAqa8/KHzWycjeeeGmwq8Zp1+5EwkEpc1EUxmeQmFhjciSbTJ7ovXzKw0KNL7k2LbiZ6LJj1Evmdz4l4jX2zC/e/7NGG8G+lVzvs9OKLxYGV6CcmTxxEfJQd4l7BH7EhAUuHDfoh1vu+YYt25lNZSVHvUcpFnY0lOKh25/Bu1Qj5tYDmQNH9yqeYqM2BZc4eRgTtEtB37PP6hKZ+pQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kExombM0qITJJYh8ztK7Dllt8+CpkktwJWq+WADkmLY=; b=gYuhmMXVly02SAOFwlGkPiTQZuBYVm7HXmna5uVakk+Dc0lxxbl0drkgTLV9uByqrT+gAJL/RnoxH8hLLwLvOq0l+3lmEZw4VX+ur/UgXQ7BdVBPJ1D8eAWeFLRiCLd32Y6UEh0OV30AugXb9KOiWT7GG3UCycxAytJnd/psKAlI+yq+6ItUlo05q/Wi7/dnoC3vKoqymV2KtZCdrxGg0hwipDyLro4MJ3uUUDMgkrbYUn9hYKlxxSl/8nsMLy/T1Lh6KLWcJY5NkagpzEPhKq9pyIPfmxEpsEXroSoo1p+0GMi+PvrDxIql4TcH+uPrZBz0b+tHlPdEzXjoBjnUig== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: gnu.org; dkim=none (message not signed) header.d=none;gnu.org; dmarc=none action=none header.from=suse.com; Received: from DU2PR04MB8648.eurprd04.prod.outlook.com (2603:10a6:10:2df::21) by DU2PR04MB8760.eurprd04.prod.outlook.com (2603:10a6:10:2e3::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.21; Mon, 2 Aug 2021 09:40:48 +0000 Received: from DU2PR04MB8648.eurprd04.prod.outlook.com ([fe80::245b:a7da:fcc:25a1]) by DU2PR04MB8648.eurprd04.prod.outlook.com ([fe80::245b:a7da:fcc:25a1%5]) with mapi id 15.20.4373.026; Mon, 2 Aug 2021 09:40:48 +0000 From: Michael Chang To: The development of GNU GRUB CC: Michael Chang , Olav Reinert Subject: [PATCH] diskfilter: use nodes in logical volume's segment as member device Date: Mon, 2 Aug 2021 17:40:20 +0800 Message-ID: <20210802094020.19258-1-mchang@suse.com> X-Mailer: git-send-email 2.31.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: HK2PR04CA0047.apcprd04.prod.outlook.com (2603:1096:202:14::15) To DU2PR04MB8648.eurprd04.prod.outlook.com (2603:10a6:10:2df::21) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost (114.44.49.216) by HK2PR04CA0047.apcprd04.prod.outlook.com (2603:1096:202:14::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.18 via Frontend Transport; Mon, 2 Aug 2021 09:40:47 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 72bbaca2-36e0-4054-1082-08d955999b98 X-MS-TrafficTypeDiagnostic: DU2PR04MB8760: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4941; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YBfyhZ0dChe02LdskLJvHonsaY/S8GRFx2poCYwEeJMM+IRQxZMFoP16nBY3xWEBD2DZmpwP4LsJNHHCQfETuLWdWh7sIyCq2GyblqMhfoefKqWkhY+5/QIZP0dqHNQ27RTYj/742pJ1swfL35DsfZRixOIawFVP/py6PheMtEDgr5k0ss0k+AHSoCOkufcInKjsQE4Uti+UMqT04xtXuTcZCsmIGzlgFEF8cobBdI/JYnfJnA1rLwNTCK7mOrQoUvd0ZArTsy0pwx3GxCK5v9LqQkvq11b5sv4DjVRMn6ZgdGYOMtYWlp2Oc40YyOnOxhL1cwZ5YL0IlVDNn1sDQtyYENDP10dwIemrjOI3YzFRA0BTiKfuYnXFdFnCydY1TkuWpVr/7CR3N4sXcw4PkDKumdYqD+IcfZ8gUlxsmgGq/P5okngdAP6omdpBbUPCRBWUfYjWZEtafleWtmhaNQ+LgNF949R0m6MzAi+HsASgNix3q4Djl1nbRekhPxxQ+lHH6U6ksv8INNyHqkbshFZUylhMfAtwx+wKVpmJDna/8MeI+PuAciNwK+syO0DNbOTmrP3l6xI+n3mgUzW7ksCJ/nV+WCTB6bTniltKkY3u4hVMAs9ueUjcqVUHMEQhSq20TizjnML9e5dDZIa0BKypwEcDx40293NWHHBIu6PDEKopF7lKUoM2mpAxuN/J X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU2PR04MB8648.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(39850400004)(346002)(376002)(136003)(396003)(366004)(86362001)(8936002)(1076003)(8676002)(66556008)(66476007)(186003)(66946007)(26005)(6916009)(6666004)(83380400001)(36756003)(316002)(38100700002)(6496006)(2906002)(956004)(2616005)(4326008)(54906003)(6486002)(478600001)(5660300002)(11716005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?YE5+hzgh5NhDlnn98A9K1x8mnP16N5JtaQc4cuMt8HY4Ar58zLh3M0eFUWvH?= =?us-ascii?Q?4zl8stHSBJIxvvfB9tCwpsucdJxWTM4j3RxCDVh3kQLTbmgXmH23FqL1/Ck1?= =?us-ascii?Q?BFJWIsQRGMlowLMoSe6NWe/DW30xyh9W6OcG2wVTyI6hm2J4Nm5Yv/qsuqbZ?= =?us-ascii?Q?kn8CoL5/58EOMamg2XRq8qzsyj6wvu1ppE0Mxzr0NmIu85rvz6V0XFjkaoY3?= =?us-ascii?Q?fQawD1rGWN/XlT2LM/XK5eXIz2qIx4T61s85wGuF3Q+TdzMXz1dLsGr59EcL?= =?us-ascii?Q?vd2QJdjFAzg0kO5stX86S7v3C8i9rr+7vIlpD3tRJGic3Nct+7NWTPVNANGh?= =?us-ascii?Q?vm+6r8PtMFzGIXAHRqx+a/pVDVdBguI43P8B/T6gll+anPhsVWNiRpFu2GUh?= =?us-ascii?Q?gLLhd6FlQcaaDuI37Vn2G5Mn723+t18KmrxHm5ONG54NsNhP39ZAtxuXfC8U?= =?us-ascii?Q?fEbkJlglyOLYr3Yc0B250U9fKrA7eN3zXY4wA5dKLBSq9S0ZUuDzsq5LqjLG?= =?us-ascii?Q?Re6aVtciZzwB2Q8YtOVSb1f9eQaoGvDuuXCz+yoEthm1WQON+PDAdDSdEQ01?= =?us-ascii?Q?goGDJuYs13XkB4YY/27jVz8iP8SSLU09gvnq4bTBh/2YNU2UWKXyRkI/lSHI?= =?us-ascii?Q?69t+F44DGr9+j2OuFGySuLNK9k63iauCmIUoGhECYy/UMfdmYsdfAfB41uOi?= =?us-ascii?Q?mj+mguUsHFuBspDQcrp/DvZVtPLlu9hKJ9nHRd+lmA/6Jzuu2r0DIDTL1OXK?= =?us-ascii?Q?sShxQNx5Y07+YDHGpJTQAMKX4s22vMxPwc8PucHh8cPRzlUa3J+AKwVVFApd?= =?us-ascii?Q?G/CK+Zjacshqsm3FBTqtqyMMQwh28KfbatlcF7RTsB8477SHq5Al1pMWtu1g?= =?us-ascii?Q?m+6woaJh7uSITOjpdee0jRNTqhbevcDFH3pGQW2fv6w5PLgIVkFh3Z90N3B2?= =?us-ascii?Q?pNQQUnBY4HWwf8l121zLMfth0Ay0KIaVr/l3eiOnqSnaVmDp1q6xU1m8wSuU?= =?us-ascii?Q?cLh1l5UTRDxTP5rs1wDH6sjgLs7fa6uIRUXi0wTVQW2jnzpAxqlvFNCB31FL?= =?us-ascii?Q?LYovzHbkGcq5UGH4PzYy7KE1LVeDkODA8mcv8NjzOBfdSSDUuMhsh5FBoIHQ?= =?us-ascii?Q?w62d8nh7j8LZopIfpFyxNH4xgjgzdLzYNW3dBxystkm7TfUzyB2QFITuJNWX?= =?us-ascii?Q?nUvKLaxbVAgycdZIZzydalMjPmL+tG7W36vQt9fpHC2T14pYXSAwBlWm7coI?= =?us-ascii?Q?Z/NTooy8OIN3veTe2UYmR2gDB5VHEo8eeexMl0yisnun/0/jwg+aQ8L2rhnl?= =?us-ascii?Q?sQ/ot7xlFjSEnKH1nifrri0A?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 72bbaca2-36e0-4054-1082-08d955999b98 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8648.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2021 09:40:47.9303 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: s0o+/vGMy1GHAGFyzNyJ2S9VEHWFMwJKgvobt9mCA4j1xjFiUsroZtkg3I5ajT2z X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR04MB8760 Received-SPF: pass client-ip=194.104.111.102; envelope-from=mchang@suse.com; helo=de-smtp-delivery-102.mimecast.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Aug 2021 09:40:57 -0000 Currently the grub_diskfilter_memberlist function returns all physical volumes added to a volume group to which a logical volume (LV) belongs. However this is suboptimal as it doesn't fit the intended behavior of returning underlying devices that make up the LV. To give a clear picture, the result should be identical to running commands below to display the logical volumes with underlying physical volumes in use. lvs -o +devices /dev/system/root lvdisplay --maps /dev/system/root This change is required if any part of the PV not used by root LV is encrypted. Using this lvm setup as an example: localhost:~ # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 20G 0 disk =E2=94=9C=E2=94=80vda1 253:1 0 8M 0 part =E2=94=94=E2=94=80vda2 253:2 0 20G 0 part =E2=94=9C=E2=94=80system-swap 254:0 0 1.4G 0 lvm [SWAP] =E2=94=94=E2=94=80system-root 254:1 0 18.6G 0 lvm / vdb 253:16 0 10M 0 disk =E2=94=94=E2=94=80data 254:2 0 8M 0 crypt =E2=94=94=E2=94=80system-data 254:3 0 4M 0 lvm /data Running grub-install would end up with error because "system" VG contains /dev/vdb which is encrypted. error: attempt to install to encrypted disk without cryptodisk enabled. Set `GRUB_ENABLE_CRYPTODISK=3Dy' in file `/etc/default/grub'. Certainly we can enable GRUB_ENABLE_CRYPTODISK=3Dy and move on, but that is not always acceptable since the server may need to boot unattended, in addition typing passphase for every system startup can be a big hassle of which most users would like to avoid. This patch solves the problem by returning physical volumes, /dev/vda2, rightly used by system-root in the example above, thus changing how grub-install perceives the underlying block device to boot and avoids the error from happening. Signed-off-by: Michael Chang Tested-by: Olav Reinert --- grub-core/disk/diskfilter.c | 44 +++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c index 6eb2349a6..595f5f70f 100644 --- a/grub-core/disk/diskfilter.c +++ b/grub-core/disk/diskfilter.c @@ -300,6 +300,8 @@ grub_diskfilter_memberlist (grub_disk_t disk) grub_disk_dev_t p; struct grub_diskfilter_vg *vg; struct grub_diskfilter_lv *lv2 =3D NULL; + struct grub_diskfilter_segment *seg; + unsigned int i, j; =20 if (!lv->vg->pvs) return NULL; @@ -331,25 +333,33 @@ grub_diskfilter_memberlist (grub_disk_t disk) } } =20 - for (pv =3D lv->vg->pvs; pv; pv =3D pv->next) - { - if (!pv->disk) + for (i =3D 0, seg =3D lv->segments; i < lv->segment_count; i++, seg++) + for (j =3D0; j < seg->node_count; ++j) + if ((pv =3D seg->nodes[j].pv)) { - /* TRANSLATORS: This message kicks in during the detection of - which modules needs to be included in core image. This happens - in the case of degraded RAID and means that autodetection may - fail to include some of modules. It's an installation time - message, not runtime message. */ - grub_util_warn (_("Couldn't find physical volume `%s'." - " Some modules may be missing from core image."), - pv->name); - continue; + + if (!pv->disk) + { + /* TRANSLATORS: This message kicks in during the detection of + which modules needs to be included in core image. This happens + in the case of degraded RAID and means that autodetection may + fail to include some of modules. It's an installation time + message, not runtime message. */ + grub_util_warn (_("Couldn't find physical volume `%s'." + " Some modules may be missing from core image."), + pv->name); + continue; + } + + for (tmp =3D list; tmp; tmp =3D tmp->next) + if (grub_strcmp (tmp->disk->name, pv->disk->name) =3D=3D 0) + continue; + + tmp =3D grub_malloc (sizeof (*tmp)); + tmp->disk =3D pv->disk; + tmp->next =3D list; + list =3D tmp; } - tmp =3D grub_malloc (sizeof (*tmp)); - tmp->disk =3D pv->disk; - tmp->next =3D list; - list =3D tmp; - } =20 return list; } --=20 2.31.1