[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