diff --git a/grub-2.00-linux-mbr.patch b/grub-2.00-linux-mbr.patch new file mode 100644 index 0000000..ec579bb --- /dev/null +++ b/grub-2.00-linux-mbr.patch @@ -0,0 +1,82 @@ +From: Valdimir Serbinenko +Subject: Fix MBR remapping workaround. + +upstream rev 4405 + +--- a/grub-core/kern/emu/hostdisk.c 2012-05-27 11:19:09 +0000 ++++ b/grub-core/kern/emu/hostdisk.c 2012-06-02 11:48:44 +0000 +@@ -1067,27 +1067,18 @@ + if (fd < 0) + return grub_errno; + ++#ifdef __linux__ ++ if (sector == 0) ++ /* Work around a bug in Linux ez remapping. Linux remaps all ++ sectors that are read together with the MBR in one read. It ++ should only remap the MBR, so we split the read in two ++ parts. -jochen */ ++ max = 1; ++#endif /* __linux__ */ ++ + if (max > size) + max = size; + +-#ifdef __linux__ +- if (sector == 0 && max > 1) +- { +- /* Work around a bug in Linux ez remapping. Linux remaps all +- sectors that are read together with the MBR in one read. It +- should only remap the MBR, so we split the read in two +- parts. -jochen */ +- if (grub_util_fd_read (fd, buf, (1 << disk->log_sector_size)) +- != (1 << disk->log_sector_size)) +- return grub_error (GRUB_ERR_READ_ERROR, N_("cannot read `%s': %s"), +- map[disk->id].device, strerror (errno)); +- +- buf += (1 << disk->log_sector_size); +- size--; +- max--; +- } +-#endif /* __linux__ */ +- + if (grub_util_fd_read (fd, buf, max << disk->log_sector_size) + != (ssize_t) (max << disk->log_sector_size)) + return grub_error (GRUB_ERR_READ_ERROR, N_("cannot read `%s': %s"), +@@ -1111,28 +1102,18 @@ + if (fd < 0) + return grub_errno; + ++#ifdef __linux__ ++ if (sector == 0) ++ /* Work around a bug in Linux ez remapping. Linux remaps all ++ sectors that are write together with the MBR in one write. It ++ should only remap the MBR, so we split the write in two ++ parts. -jochen */ ++ max = 1; ++#endif /* __linux__ */ ++ + if (max > size) + max = size; + +-#ifdef __linux__ +- if (sector == 0 && max > 1) +- { +- /* Work around a bug in Linux ez remapping. Linux remaps all +- sectors that are write together with the MBR in one write. It +- should only remap the MBR, so we split the write in two +- parts. -jochen */ +- if (grub_util_fd_write (fd, buf, (1 << disk->log_sector_size)) +- != (1 << disk->log_sector_size)) +- return grub_error (GRUB_ERR_WRITE_ERROR, +- N_("cannot write to `%s': %s"), +- map[disk->id].device, strerror (errno)); +- +- buf += (1 << disk->log_sector_size); +- size--; +- max--; +- } +-#endif /* __linux__ */ +- + if (grub_util_fd_write (fd, buf, max << disk->log_sector_size) + != (ssize_t) (max << disk->log_sector_size)) + return grub_error (GRUB_ERR_WRITE_ERROR, N_("cannot write to `%s': %s"), diff --git a/grub2.spec b/grub2.spec index c865c80..c2e121f 100644 --- a/grub2.spec +++ b/grub2.spec @@ -58,7 +58,7 @@ Patch10: grub-2.00-add-fw_path-search.patch Patch11: grub-2.00-Add-fwsetup.patch Patch13: grub-2.00-Dont-set-boot-on-ppc.patch Patch14: grub-2.00-ignore-gnulib-gets-stupidity.patch - +Patch15: grub-2.00-linux-mbr.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)