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
This commit is contained in:
		
							parent
							
								
									7045ce64ed
								
							
						
					
					
						commit
						7f44b9b444
					
				
							
								
								
									
										82
									
								
								grub-2.00-linux-mbr.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								grub-2.00-linux-mbr.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,82 @@ | |||||||
|  | From: Valdimir Serbinenko <phcoder@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"), | ||||||
| @ -58,7 +58,7 @@ Patch10:	grub-2.00-add-fw_path-search.patch | |||||||
| Patch11:	grub-2.00-Add-fwsetup.patch | Patch11:	grub-2.00-Add-fwsetup.patch | ||||||
| Patch13:	grub-2.00-Dont-set-boot-on-ppc.patch | Patch13:	grub-2.00-Dont-set-boot-on-ppc.patch | ||||||
| Patch14:	grub-2.00-ignore-gnulib-gets-stupidity.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) | BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user