New function.
(grub_util_biosdisk_close): Use grub_util_biosdisk_flush.
* include/grub/emu/hostdisk.h (grub_util_biosdisk_flush): New proto.
* util/grub-setup.c (setup): Use grub_util_biosdisk_flush.
+2011-04-19 Vladimir Serbinenko <phcoder@gmail.com>
+
+ * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_flush):
+ New function.
+ (grub_util_biosdisk_close): Use grub_util_biosdisk_flush.
+ * include/grub/emu/hostdisk.h (grub_util_biosdisk_flush): New proto.
+ * util/grub-setup.c (setup): Use grub_util_biosdisk_flush.
+
2011-04-19 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/term/gfxterm.c (grub_gfxterm_fullscreen): Preserve previous
return grub_errno;
}
+grub_err_t
+grub_util_biosdisk_flush (struct grub_disk *disk)
+{
+ struct grub_util_biosdisk_data *data = disk->data;
+
+ if (disk->dev->id != GRUB_DISK_DEVICE_BIOSDISK_ID)
+ return GRUB_ERR_NONE;
+ if (data->fd == -1)
+ {
+ data->fd = open_device (disk, 0, O_RDONLY);
+ if (data->fd < 0)
+ return grub_errno;
+ }
+ fsync (data->fd);
+#ifdef __linux__
+ if (data->is_disk)
+ ioctl (data->fd, BLKFLSBUF, 0);
+#endif
+ return GRUB_ERR_NONE;
+}
+
static void
grub_util_biosdisk_close (struct grub_disk *disk)
{
if (data->fd != -1)
{
if (data->access_mode == O_RDWR || data->access_mode == O_WRONLY)
- {
- fsync (data->fd);
-#ifdef __linux__
- if (data->is_disk)
- ioctl (data->fd, BLKFLSBUF, 0);
-#endif
- }
+ grub_util_biosdisk_flush (disk);
close (data->fd);
}
free (data);
const char *grub_util_biosdisk_get_osdev (grub_disk_t disk);
int grub_util_biosdisk_is_present (const char *name);
int grub_util_biosdisk_is_floppy (grub_disk_t disk);
+grub_err_t grub_util_biosdisk_flush (struct grub_disk *disk);
#endif /* ! GRUB_BIOSDISK_MACHINE_UTIL_HEADER */
core_path_dev = grub_make_system_path_relative_to_its_root (core_path_dev_full);
free (core_path_dev_full);
- /* It is a Good Thing to sync two times. */
- sync ();
- sync ();
+ grub_util_biosdisk_flush (root_dev->disk);
#define MAX_TRIES 5
grub_util_info ("error message = %s", grub_errmsg);
grub_errno = GRUB_ERR_NONE;
- sync ();
+ grub_util_biosdisk_flush (root_dev->disk);
sleep (1);
}
grub_util_error ("%s", grub_errmsg);
- /* Sync is a Good Thing. */
- sync ();
+ grub_util_biosdisk_flush (root_dev->disk);
+ grub_util_biosdisk_flush (dest_dev->disk);
free (core_path);
free (core_img);