SHA256
1
0
forked from pool/libguestfs
libguestfs/1000-force-virtio_blk-in-old-guest-kernel.patch
Olaf Hering de9c98eadf - Update to version 1.22.6
* Initialize CLEANUP_* stack variables with NULL in various places.
  * daemon: sh: Fix missing initializer which caused segfault (RHBZ#1000121).
  * fish: Document that guestfish --remote --add won't work as expected (RHBZ#998513).
  * launch: direct: Don't try to wait for qemu if parent process forked (RHBZ#998482).
  * list-filesystems: Don't fail if there are no filesystems found (RHBZ#995711).
  * virt-list-filesystems: Fix to use $g->canonical_device_name instead of homebrew function.
  * daemon: If /proc/modules doesn't exist, linuxmodules optgroup is disabled.
  * launch: direct: Print \n after printing qemu command line.
  * conn: Make sure we display all log messages when qemu goes away.
  * lib: Turn 'random_chars' function used by libvirt backend into utility function.
  * daemon: ldm: Don't return an error if /dev/mapper doesn't exist.
  * daemon: Move all RESOLVE macros to daemon/stubs.c.
  * proto: Fix --enable-packet-dump mode.
  * daemon: Close augeas, hivex handles in unmount_all.
  * Fix parsing of boot flag in do_part_get_bootable()
  * Update gnulib to latest version.
  * augeas: Improve error reporting.
  * launch: direct: Add drives after machine parameters.
  * fish: Fix guestfish so it can recognize sheepdog://... as a valid URI.
  * resize: Move isatty_stdout function to separate module (TTY.isatty_stdout).
  * daemon: cap-get-file: Return empty string if no capability on file (RHBZ#989356).
  * src/file.c: Be sure to call guestfs___lazy_make_tmpdir before using g->tmpdir.
  * generator: Fix the case where a daemon function has one FileIn/FileOut parameter and no other parameters.

OBS-URL: https://build.opensuse.org/package/show/Virtualization/libguestfs?expand=0&rev=237
2013-09-19 18:30:37 +00:00

114 lines
4.0 KiB
Diff

From f010abe024b47057f814e369b7b647e52d001019 Mon Sep 17 00:00:00 2001
From: Olaf Hering <olaf@aepfle.de>
Date: Mon, 3 Sep 2012 19:50:44 +0200
Subject: [PATCH] force virtio_blk in old guest kernel
Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
fish/options.c | 7 +++++--
src/guestfs-internal.h | 1 +
src/handle.c | 16 ++++++++++++++++
src/inspect-fs-unix.c | 4 ++--
src/launch-direct.c | 2 ++
5 files changed, 26 insertions(+), 4 deletions(-)
Index: libguestfs-1.22.5/fish/options.c
===================================================================
--- libguestfs-1.22.5.orig/fish/options.c
+++ libguestfs-1.22.5/fish/options.c
@@ -286,7 +286,10 @@ add_drives (struct drv *drv, char next_d
{
int r;
struct guestfs_add_drive_opts_argv ad_optargs;
-
+ int use_virtio_blk = 0;
+#ifdef GUESTFS_QEMU_NO_VIRTIO_BLK
+ use_virtio_blk = 1;
+#endif
if (next_drive > 'z') {
fprintf (stderr,
_("%s: too many drives added on the command line\n"),
@@ -300,7 +303,7 @@ add_drives (struct drv *drv, char next_d
free (drv->device);
drv->device = NULL;
- if (asprintf (&drv->device, "/dev/sd%c", next_drive) == -1) {
+ if (asprintf (&drv->device, "/dev/%s%c", use_virtio_blk ? "vd" : "sd", next_drive) == -1) {
perror ("asprintf");
exit (EXIT_FAILURE);
}
Index: libguestfs-1.22.5/src/guestfs-internal.h
===================================================================
--- libguestfs-1.22.5.orig/src/guestfs-internal.h
+++ libguestfs-1.22.5/src/guestfs-internal.h
@@ -432,6 +432,7 @@ struct guestfs_h
char *virt_selinux_label;
char *virt_selinux_imagelabel;
bool virt_selinux_norelabel_disks;
+ int use_virtio_blk;
};
/* Per-filesystem data stored for inspect_os. */
Index: libguestfs-1.22.5/src/handle.c
===================================================================
--- libguestfs-1.22.5.orig/src/handle.c
+++ libguestfs-1.22.5/src/handle.c
@@ -230,6 +230,22 @@ parse_environment (guestfs_h *g,
}
}
+/*
+ * Currently virtio_scsi is forced if qemu in the host supports this
+ * feature. This test does however not take the capabilities of the started
+ * guest into account. As a result no disks will be found if the guest
+ * kernel is older than 3.4.
+ */
+#ifdef GUESTFS_QEMU_NO_VIRTIO_BLK
+ static const char env_string[] = "GUESTFS_QEMU_NO_VIRTIO_BLK";
+ str = getenv(env_string);
+ g->use_virtio_blk = str == NULL;
+ if (str)
+ debug (g, "SuSE: %s in environment, preserving virtio-scsi setting.", env_string);
+ else
+ debug (g, "SuSE: %s not in environment, preventing virtio-scsi usage in old guest kernel.", env_string);
+#endif
+
return 0;
}
Index: libguestfs-1.22.5/src/inspect-fs-unix.c
===================================================================
--- libguestfs-1.22.5.orig/src/inspect-fs-unix.c
+++ libguestfs-1.22.5/src/inspect-fs-unix.c
@@ -1404,7 +1404,7 @@ resolve_fstab_device_diskbyid (guestfs_h
return 0;
/* Make the partition name and check it exists. */
- device = safe_asprintf (g, "/dev/sda%s", part);
+ device = safe_asprintf (g, "/dev/%sa%s", g->use_virtio_blk ? "vd" : "sd", part);
if (!is_partition (g, device)) {
free (device);
return 0;
@@ -1481,7 +1481,7 @@ resolve_fstab_device (guestfs_h *g, cons
if (disk_i != -1 && disk_i <= 26 &&
slice_i > 0 && slice_i <= 1 /* > 4 .. see comment above */ &&
part_i >= 0 && part_i < 26) {
- device = safe_asprintf (g, "/dev/sd%c%d", disk_i + 'a', part_i + 5);
+ device = safe_asprintf (g, "/dev/%s%c%d", g->use_virtio_blk ? "vd" : "sd", disk_i + 'a', part_i + 5);
}
}
else if ((part = match1 (g, spec, re_diskbyid)) != NULL) {
Index: libguestfs-1.22.5/src/launch-direct.c
===================================================================
--- libguestfs-1.22.5.orig/src/launch-direct.c
+++ libguestfs-1.22.5/src/launch-direct.c
@@ -961,6 +961,8 @@ qemu_supports_virtio_scsi (guestfs_h *g)
g->direct.virtio_scsi = 3;
}
}
+ if (g->use_virtio_blk)
+ g->direct.virtio_scsi = 2;
return g->direct.virtio_scsi == 1;
}