* grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_write) [__linux__]:
Fix MBR remapping workaround. (grub_util_biosdisk_read) [__linux__]: Likewise.
This commit is contained in:
parent
8a7ecad3ab
commit
6297e19736
2 changed files with 24 additions and 37 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2012-06-02 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_write) [__linux__]:
|
||||||
|
Fix MBR remapping workaround.
|
||||||
|
(grub_util_biosdisk_read) [__linux__]: Likewise.
|
||||||
|
|
||||||
2012-06-01 Vladimir Serbinenko <phcoder@gmail.com>
|
2012-06-01 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* util/grub-install.in: Check for ieee1275 and not ieee1276.
|
* util/grub-install.in: Check for ieee1275 and not ieee1276.
|
||||||
|
|
|
@ -1067,27 +1067,18 @@ grub_util_biosdisk_read (grub_disk_t disk, grub_disk_addr_t sector,
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
if (max > size)
|
|
||||||
max = size;
|
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
if (sector == 0 && max > 1)
|
if (sector == 0)
|
||||||
{
|
|
||||||
/* Work around a bug in Linux ez remapping. Linux remaps all
|
/* Work around a bug in Linux ez remapping. Linux remaps all
|
||||||
sectors that are read together with the MBR in one read. It
|
sectors that are read together with the MBR in one read. It
|
||||||
should only remap the MBR, so we split the read in two
|
should only remap the MBR, so we split the read in two
|
||||||
parts. -jochen */
|
parts. -jochen */
|
||||||
if (grub_util_fd_read (fd, buf, (1 << disk->log_sector_size))
|
max = 1;
|
||||||
!= (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__ */
|
#endif /* __linux__ */
|
||||||
|
|
||||||
|
if (max > size)
|
||||||
|
max = size;
|
||||||
|
|
||||||
if (grub_util_fd_read (fd, buf, max << disk->log_sector_size)
|
if (grub_util_fd_read (fd, buf, max << disk->log_sector_size)
|
||||||
!= (ssize_t) (max << disk->log_sector_size))
|
!= (ssize_t) (max << disk->log_sector_size))
|
||||||
return grub_error (GRUB_ERR_READ_ERROR, N_("cannot read `%s': %s"),
|
return grub_error (GRUB_ERR_READ_ERROR, N_("cannot read `%s': %s"),
|
||||||
|
@ -1111,28 +1102,18 @@ grub_util_biosdisk_write (grub_disk_t disk, grub_disk_addr_t sector,
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
if (max > size)
|
|
||||||
max = size;
|
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
if (sector == 0 && max > 1)
|
if (sector == 0)
|
||||||
{
|
|
||||||
/* Work around a bug in Linux ez remapping. Linux remaps all
|
/* Work around a bug in Linux ez remapping. Linux remaps all
|
||||||
sectors that are write together with the MBR in one write. It
|
sectors that are write together with the MBR in one write. It
|
||||||
should only remap the MBR, so we split the write in two
|
should only remap the MBR, so we split the write in two
|
||||||
parts. -jochen */
|
parts. -jochen */
|
||||||
if (grub_util_fd_write (fd, buf, (1 << disk->log_sector_size))
|
max = 1;
|
||||||
!= (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__ */
|
#endif /* __linux__ */
|
||||||
|
|
||||||
|
if (max > size)
|
||||||
|
max = size;
|
||||||
|
|
||||||
if (grub_util_fd_write (fd, buf, max << disk->log_sector_size)
|
if (grub_util_fd_write (fd, buf, max << disk->log_sector_size)
|
||||||
!= (ssize_t) (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"),
|
return grub_error (GRUB_ERR_WRITE_ERROR, N_("cannot write to `%s': %s"),
|
||||||
|
|
Loading…
Reference in a new issue