SHA256
1
0
forked from pool/grub2
grub2/0001-Unify-the-check-to-enable-btrfs-relative-path.patch
Michael Chang 7e75e7f881 Accepting request 1138021 from home:michael-chang:grub:2.12
- Version bump to 2.12 (PED-5589)
  * Added:
    - grub-2.12.tar.xz
    - fix_no_extra_deps_in_release_tarball.patch
  * Removed:
    - grub-2.12~rc1.tar.xz
  * Patch dropped as it merged into new version:
    - 0001-disk-cryptodisk-Fix-missing-change-when-updating-to-.patch
    - 0001-fs-btrfs-Zero-file-data-not-backed-by-extents.patch
    - 0001-fs-ntfs-Fix-an-OOB-write-when-parsing-the-ATTRIBUTE_.patch
    - 0002-fs-ntfs-Fix-an-OOB-read-when-reading-data-from-the-r.patch
    - 0003-fs-ntfs-Fix-an-OOB-read-when-parsing-directory-entri.patch
    - 0004-fs-ntfs-Fix-an-OOB-read-when-parsing-bitmaps-for-ind.patch
    - 0005-fs-ntfs-Fix-an-OOB-read-when-parsing-a-volume-label.patch
    - 0006-fs-ntfs-Make-code-more-readable.patch
    - 0001-kern-ieee1275-init-Restrict-high-memory-in-presence-.patch
    - 0001-fs-xfs-Incorrect-short-form-directory-data-boundary-.patch
    - 0002-fs-xfs-Fix-XFS-directory-extent-parsing.patch
    - 0003-fs-xfs-add-large-extent-counters-incompat-feature-su.patch
    - 0001-mkstandalone-ensure-stable-timestamps-for-generated-.patch
    - 0002-mkstandalone-ensure-deterministic-tar-file-creation-.patch
  * Patch adjusted for the updated base version:
    - use-grub2-as-a-package-name.patch
    - grub2-s390x-04-grub2-install.patch
    - grub2-btrfs-04-grub2-install.patch
    - grub2-ppc64le-disable-video.patch
    - 0002-AUDIT-0-http-boot-tracker-bug.patch
    - 0001-Unify-the-check-to-enable-btrfs-relative-path.patch
    - 0003-Handle-multi-arch-64-on-32-boot-in-linuxefi-loader.patch
    - 0004-Add-suport-for-signing-grub-with-an-appended-signatu.patch

OBS-URL: https://build.opensuse.org/request/show/1138021
OBS-URL: https://build.opensuse.org/package/show/Base:System/grub2?expand=0&rev=480
2024-01-11 07:48:22 +00:00

151 lines
4.5 KiB
Diff

From 80bb1b17b3f596dbd7331cf9cb20a46c8ef9800b Mon Sep 17 00:00:00 2001
From: Michael Chang <mchang@suse.com>
Date: Sat, 22 Aug 2020 02:32:43 +0800
Subject: [PATCH] Unify the check to enable btrfs relative path
This unified the test in grub-install and grub-mkconfig that the path to
default or selected btrfs subvolume/snapshot is used if the root file
system is btrfs and the config has enabled btrfs snapshot booting.
Signed-off-by: Michael Chang <mchang@suse.com>
---
util/grub-install.c | 67 +++++++++++++++++++++++++++------------
util/grub-mkconfig_lib.in | 3 +-
2 files changed, 48 insertions(+), 22 deletions(-)
--- a/util/grub-install.c
+++ b/util/grub-install.c
@@ -886,6 +886,7 @@
const char *efi_file = NULL;
char **grub_devices;
grub_fs_t grub_fs;
+ grub_fs_t root_fs;
grub_device_t grub_dev = NULL;
enum grub_install_plat platform;
char *grubdir, *device_map;
@@ -898,6 +899,8 @@
int efidir_is_mac = 0;
int is_prep = 0;
const char *pkgdatadir;
+ char *rootdir_path;
+ char **rootdir_devices;
grub_util_host_init (&argc, &argv);
product_version = xstrdup (PACKAGE_VERSION);
@@ -911,9 +914,6 @@
grub_util_load_config (&config);
- if (config.is_suse_btrfs_snapshot_enabled)
- use_relative_path_on_btrfs = 1;
-
if (!bootloader_id && config.grub_distributor)
{
char *ptr;
@@ -1064,6 +1064,45 @@
grub_hostfs_init ();
grub_host_init ();
+ {
+ char *rootdir_grub_devname;
+ grub_device_t rootdir_grub_dev;
+ char *t = grub_util_path_concat (2, "/", rootdir);
+
+ rootdir_path = grub_canonicalize_file_name (t);
+ if (!rootdir_path)
+ grub_util_error (_("failed to get canonical path of `%s'"), t);
+
+ rootdir_devices = grub_guess_root_devices (rootdir_path);
+ if (!rootdir_devices || !rootdir_devices[0])
+ grub_util_error (_("cannot find a device for %s (is /dev mounted?)"),
+ rootdir_path);
+
+ for (curdev = rootdir_devices; *curdev; curdev++)
+ grub_util_pull_device (*curdev);
+
+ rootdir_grub_devname = grub_util_get_grub_dev (rootdir_devices[0]);
+ if (!rootdir_grub_devname)
+ grub_util_error (_("cannot find a GRUB drive for %s. Check your device.map"),
+ rootdir_devices[0]);
+
+ rootdir_grub_dev = grub_device_open (rootdir_grub_devname);
+ if (! rootdir_grub_dev)
+ grub_util_error ("%s", grub_errmsg);
+
+ root_fs = grub_fs_probe (rootdir_grub_dev);
+ if (!root_fs)
+ grub_util_error ("%s", grub_errmsg);
+
+ if (config.is_suse_btrfs_snapshot_enabled
+ && grub_strncmp(root_fs->name, "btrfs", sizeof ("btrfs") - 1) == 0)
+ use_relative_path_on_btrfs = 1;
+
+ free (t);
+ free (rootdir_grub_devname);
+ grub_device_close (rootdir_grub_dev);
+ }
+
switch (platform)
{
case GRUB_INSTALL_PLATFORM_I386_EFI:
@@ -1478,8 +1517,7 @@
debug_image);
}
- if (config.is_suse_btrfs_snapshot_enabled
- && grub_strncmp(grub_fs->name, "btrfs", sizeof ("btrfs") - 1) == 0)
+ if (use_relative_path_on_btrfs)
{
if (!load_cfg_f)
load_cfg_f = grub_util_fopen (load_cfg, "wb");
@@ -1670,21 +1708,13 @@
#ifdef __linux__
- if (config.is_suse_btrfs_snapshot_enabled
- && grub_strncmp(grub_fs->name, "btrfs", sizeof ("btrfs") - 1) == 0)
+ if (use_relative_path_on_btrfs)
{
char *subvol = NULL;
char *mount_path = NULL;
- char **rootdir_devices = NULL;
- char *t = grub_util_path_concat (2, "/", rootdir);
- char *rootdir_path = grub_canonicalize_file_name (t);
-
- if (rootdir_path && grub_util_is_directory (rootdir_path))
- rootdir_devices = grub_guess_root_devices (rootdir_path);
-
- if (rootdir_devices && rootdir_devices[0])
- if (grub_strcmp (rootdir_devices[0], grub_devices[0]) == 0)
- subvol = grub_util_get_btrfs_subvol (platdir, &mount_path);
+
+ if (grub_strcmp (rootdir_devices[0], grub_devices[0]) == 0)
+ subvol = grub_util_get_btrfs_subvol (platdir, &mount_path);
if (subvol && mount_path)
{
@@ -1709,11 +1739,6 @@
}
}
- free (t);
- free (rootdir_path);
- for (curdev = rootdir_devices; *curdev; curdev++)
- free (*curdev);
- free (rootdir_devices);
free (subvol);
free (mount_path);
}
--- a/util/grub-mkconfig_lib.in
+++ b/util/grub-mkconfig_lib.in
@@ -49,7 +49,8 @@
make_system_path_relative_to_its_root ()
{
- if [ "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" = "xtrue" ] ; then
+ if [ "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" = "xtrue" ] &&
+ [ "x${GRUB_FS}" = "xbtrfs" ] ; then
"${grub_mkrelpath}" -r "$1"
else
"${grub_mkrelpath}" "$1"