[grub2: 16/22] add grub-2.00-linux-mbr.patch - fix upstream bug #36490
Peter Jones
pjones at fedoraproject.org
Mon Jun 4 15:51:08 UTC 2012
commit 7f44b9b44425a1ee28dcae3682219c34b2501b41
Author: Mads Kiilerich <mads at kiilerich.com>
Date: Sat Jun 2 01:55:15 2012 +0200
add grub-2.00-linux-mbr.patch - fix upstream bug #36490
backport upstream rev 4405
bug #36490: grub-probe doesn't work with fat32 file systems
grub-2.00-linux-mbr.patch | 82 +++++++++++++++++++++++++++++++++++++++++++++
grub2.spec | 2 +-
2 files changed, 83 insertions(+), 1 deletions(-)
---
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 <phcoder at gmail.com>
+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)
More information about the scm-commits
mailing list