* grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_data): New member
is_disk. (grub_util_biosdisk_open): Don't apply ioctl on non-disk devices. (open_device) Likewise. (grub_util_biosdisk_close): Likewise. Reported by: Mark Korenberger.
This commit is contained in:
parent
cbac5b1ece
commit
5ca1a64de6
2 changed files with 18 additions and 3 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2011-04-10 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_data): New member
|
||||||
|
is_disk.
|
||||||
|
(grub_util_biosdisk_open): Don't apply ioctl on non-disk devices.
|
||||||
|
(open_device) Likewise.
|
||||||
|
(grub_util_biosdisk_close): Likewise.
|
||||||
|
Reported by: Mark Korenberger.
|
||||||
|
|
||||||
2011-04-10 Alexander Kurtz <kurtz.alex@googlemail.com>
|
2011-04-10 Alexander Kurtz <kurtz.alex@googlemail.com>
|
||||||
|
|
||||||
* util/grub-mkconfig_lib.in: Add missing quotes.
|
* util/grub-mkconfig_lib.in: Add missing quotes.
|
||||||
|
|
|
@ -138,6 +138,7 @@ struct grub_util_biosdisk_data
|
||||||
char *dev;
|
char *dev;
|
||||||
int access_mode;
|
int access_mode;
|
||||||
int fd;
|
int fd;
|
||||||
|
int is_disk;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
|
@ -239,6 +240,7 @@ grub_util_biosdisk_open (const char *name, grub_disk_t disk)
|
||||||
data->dev = NULL;
|
data->dev = NULL;
|
||||||
data->access_mode = 0;
|
data->access_mode = 0;
|
||||||
data->fd = -1;
|
data->fd = -1;
|
||||||
|
data->is_disk = 0;
|
||||||
|
|
||||||
/* Get the size. */
|
/* Get the size. */
|
||||||
#if defined(__MINGW32__)
|
#if defined(__MINGW32__)
|
||||||
|
@ -279,6 +281,7 @@ grub_util_biosdisk_open (const char *name, grub_disk_t disk)
|
||||||
close (fd);
|
close (fd);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
data->is_disk = 1;
|
||||||
|
|
||||||
# if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
|
# if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
|
||||||
if (ioctl (fd, DIOCGMEDIASIZE, &nr))
|
if (ioctl (fd, DIOCGMEDIASIZE, &nr))
|
||||||
|
@ -669,7 +672,8 @@ open_device (const grub_disk_t disk, grub_disk_addr_t sector, int flags)
|
||||||
{
|
{
|
||||||
fsync (data->fd);
|
fsync (data->fd);
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
ioctl (data->fd, BLKFLSBUF, 0);
|
if (data->is_disk)
|
||||||
|
ioctl (data->fd, BLKFLSBUF, 0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -727,7 +731,8 @@ open_device (const grub_disk_t disk, grub_disk_addr_t sector, int flags)
|
||||||
{
|
{
|
||||||
fsync (data->fd);
|
fsync (data->fd);
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
ioctl (data->fd, BLKFLSBUF, 0);
|
if (data->is_disk)
|
||||||
|
ioctl (data->fd, BLKFLSBUF, 0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
close (data->fd);
|
close (data->fd);
|
||||||
|
@ -952,7 +957,8 @@ grub_util_biosdisk_close (struct grub_disk *disk)
|
||||||
{
|
{
|
||||||
fsync (data->fd);
|
fsync (data->fd);
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
ioctl (data->fd, BLKFLSBUF, 0);
|
if (data->is_disk)
|
||||||
|
ioctl (data->fd, BLKFLSBUF, 0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
close (data->fd);
|
close (data->fd);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue