SHA256
1
0
forked from pool/grub2

Accepting request 258927 from home:michael-chang:branches:Base:System

- fix errors when boot is btrfs with Windows partition scheme. The
  first partition is created on cylinder boundary that can't offer
  enough room for core.img and also the installation has to be in 
  logical paritition which made MBR the only location to install.
  (bnc#841247)
  * add grub2-setup-try-fs-embed-if-mbr-gap-too-small.patch

OBS-URL: https://build.opensuse.org/request/show/258927
OBS-URL: https://build.opensuse.org/package/show/Base:System/grub2?expand=0&rev=123
This commit is contained in:
Dirk Mueller 2014-10-31 10:03:23 +00:00 committed by Git OBS Bridge
parent fcbf2cb71b
commit 5ccf9d5533
3 changed files with 72 additions and 0 deletions

View File

@ -0,0 +1,60 @@
Index: grub-2.02~beta2/util/setup.c
===================================================================
--- grub-2.02~beta2.orig/util/setup.c
+++ grub-2.02~beta2/util/setup.c
@@ -501,8 +501,44 @@ SETUP (const char *dir,
err = grub_util_ldm_embed (dest_dev->disk, &nsec, maxsec,
GRUB_EMBED_PCBIOS, &sectors);
else if (ctx.dest_partmap)
- err = ctx.dest_partmap->embed (dest_dev->disk, &nsec, maxsec,
- GRUB_EMBED_PCBIOS, &sectors);
+ {
+ err = ctx.dest_partmap->embed (dest_dev->disk, &nsec, maxsec,
+ GRUB_EMBED_PCBIOS, &sectors);
+#ifdef GRUB_SETUP_BIOS
+ if (err == GRUB_ERR_OUT_OF_RANGE
+ && strcmp (ctx.dest_partmap->name, "msdos") == 0
+ && dest_dev->disk->id == root_dev->disk->id
+ && dest_dev->disk->dev->id == root_dev->disk->dev->id)
+ {
+ grub_fs_t root_fs;
+
+ root_fs = grub_fs_probe (root_dev);
+ if (root_fs && root_fs->embed)
+ {
+ grub_disk_addr_t *fs_sectors;
+ unsigned int fs_nsec;
+
+ fs_sectors = NULL;
+ fs_nsec = core_sectors;
+ err = root_fs->embed (root_dev, &fs_nsec, maxsec,
+ GRUB_EMBED_PCBIOS, &fs_sectors);
+ if (!err && fs_nsec >= core_sectors)
+ {
+ grub_util_info ("Your msdos embedding area is too small, will use file system embedding area instead");
+ sectors = fs_sectors;
+ nsec = fs_nsec;
+ ctx.container = root_dev->disk->partition;
+ core_dev = root_dev;
+ }
+ else
+ {
+ if (fs_sectors)
+ grub_free (fs_sectors);
+ }
+ }
+ }
+#endif
+ }
else
err = fs->embed (dest_dev, &nsec, maxsec,
GRUB_EMBED_PCBIOS, &sectors);
@@ -584,7 +620,7 @@ SETUP (const char *dir,
/* Write the core image onto the disk. */
for (i = 0; i < nsec; i++)
- grub_disk_write (dest_dev->disk, sectors[i], 0,
+ grub_disk_write (core_dev->disk, sectors[i], 0,
GRUB_DISK_SECTOR_SIZE,
core_img + i * GRUB_DISK_SECTOR_SIZE);

View File

@ -1,3 +1,13 @@
-------------------------------------------------------------------
Thu Oct 30 07:36:15 UTC 2014 - mchang@suse.com
- fix errors when boot is btrfs with Windows partition scheme. The
first partition is created on cylinder boundary that can't offer
enough room for core.img and also the installation has to be in
logical paritition which made MBR the only location to install.
(bnc#841247)
* add grub2-setup-try-fs-embed-if-mbr-gap-too-small.patch
-------------------------------------------------------------------
Tue Sep 30 03:45:04 UTC 2014 - mchang@suse.com

View File

@ -158,6 +158,7 @@ Patch45: grub2-efinet-reopen-SNP-protocol-for-exclusive-use-by-grub.patch
Patch46: grub2-xen-legacy-config-device-name.patch
Patch47: grub2-Initialized-initrd_ctx-so-we-don-t-free-a-random-poi.patch
Patch48: grub2-btrfs-fix-get_root-key-comparison-failures-due-to-en.patch
Patch49: grub2-setup-try-fs-embed-if-mbr-gap-too-small.patch
# Btrfs snapshot booting related patches
Patch101: grub2-btrfs-01-add-ability-to-boot-from-subvolumes.patch
Patch102: grub2-btrfs-02-export-subvolume-envvars.patch
@ -364,6 +365,7 @@ mv po/grub.pot po/%{name}.pot
%patch46 -p1
%patch47 -p1
%patch48 -p1
%patch49 -p1
%patch101 -p1
%patch102 -p1
%patch103 -p1