Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3cfccddffa | |||
| 1bc3776fdb | |||
| 3a44160f46 | |||
| 5e8ea6c64c | |||
| 00ce651fb8 | |||
| 3c684a55ed | |||
| b1ea570e48 | |||
| 6ccf4c1a0c | |||
| dbaa6786af |
@@ -1,31 +0,0 @@
|
||||
[suppress_function]
|
||||
symbol_version_regexp = LIBVIRT_PRIVATE.*
|
||||
soname_regexp = libvirt\\.so.*
|
||||
|
||||
[suppress_function]
|
||||
symbol_version_regexp = LIBVIRT_ADMIN_PRIVATE.*
|
||||
soname_regexp = libvirt-admin\\.so.*
|
||||
|
||||
[suppress_variable]
|
||||
symbol_version_regexp = LIBVIRT_PRIVATE.*
|
||||
soname_regexp = libvirt\\.so.*
|
||||
|
||||
[suppress_variable]
|
||||
symbol_version_regexp = LIBVIRT_ADMIN_PRIVATE.*
|
||||
soname_regexp = libvirt-admin\\.so.*
|
||||
|
||||
[suppress_function]
|
||||
symbol_version_regexp = .*
|
||||
soname_regexp = libvirt_storage_.*\\.so.*
|
||||
|
||||
[suppress_variable]
|
||||
symbol_version_regexp = .*
|
||||
soname_regexp = libvirt_storage_.*\\.so.*
|
||||
|
||||
[suppress_function]
|
||||
symbol_version_regexp = .*
|
||||
soname_regexp = libvirt_driver_.*\\.so.*
|
||||
|
||||
[suppress_variable]
|
||||
symbol_version_regexp = .*
|
||||
soname_regexp = libvirt_driver_.*\\.so.*
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
.build*.log
|
||||
*.rpm
|
||||
i686
|
||||
x86_64
|
||||
libvirt-*.tar.gz
|
||||
libvirt-0.6.0.tar.gz
|
||||
libvirt-0.6.1.tar.gz
|
||||
libvirt-0.6.2.tar.gz
|
||||
libvirt-0.6.3.tar.gz
|
||||
libvirt-0.6.4.tar.gz
|
||||
libvirt-0.6.5.tar.gz
|
||||
libvirt-0.7.0.tar.gz
|
||||
libvirt-0.7.1.tar.gz
|
||||
@@ -1,5 +0,0 @@
|
||||
.build*.log
|
||||
*.rpm
|
||||
i686
|
||||
x86_64
|
||||
libvirt-*.tar.xz
|
||||
@@ -1,34 +0,0 @@
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Wed, 5 Aug 2020 10:01:45 +0200
|
||||
Subject: [PATCH] util: Fix logic in virFileSetCOW
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
When COW is not explicitly requested to be disabled or enabled, the
|
||||
function is supposed to do nothing on non-BTRFS file systems.
|
||||
|
||||
Fixes commit 7230bc95aa78379c9ee20cf59394c5fc4305b75b.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1866157
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
(cherry picked from commit 2edd63a0dbd445112db23596ee0128521e8f1ff5)
|
||||
---
|
||||
src/util/virfile.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/util/virfile.c b/src/util/virfile.c
|
||||
index af150421e7..a06e7dfcce 100644
|
||||
--- a/src/util/virfile.c
|
||||
+++ b/src/util/virfile.c
|
||||
@@ -4550,7 +4550,7 @@ virFileSetCOW(const char *path,
|
||||
}
|
||||
|
||||
if (buf.f_type != BTRFS_SUPER_MAGIC) {
|
||||
- if (state == VIR_TRISTATE_BOOL_ABSENT) {
|
||||
+ if (state != VIR_TRISTATE_BOOL_ABSENT) {
|
||||
virReportSystemError(ENOSYS,
|
||||
_("unable to control COW flag on '%s', not btrfs"),
|
||||
path);
|
||||
@@ -1,88 +0,0 @@
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 18 Aug 2020 11:08:15 +0200
|
||||
Subject: [PATCH] virdevmapper: Don't cache device-mapper major
|
||||
|
||||
The device mapper major is needed in virIsDevMapperDevice() which
|
||||
determines whether given device is managed by device-mapper. This
|
||||
number is obtained by parsing /proc/devices and then stored in a
|
||||
global variable so that the file doesn't have to be parsed again.
|
||||
However, as it turns out this logic is flawed - the major number
|
||||
is not static and can change as it can be specified as a
|
||||
parameter when loading the dm-mod module.
|
||||
|
||||
Unfortunately, I was not able to come up with a good solution and
|
||||
thus the /proc/devices file is being parsed every time we need
|
||||
the device mapper major.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
(cherry picked from commit 82bb167f0d15b733b23931205be3488b83cb9ec6)
|
||||
---
|
||||
src/util/virdevmapper.c | 17 +++++------------
|
||||
1 file changed, 5 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c
|
||||
index a471504176..b43dbefa9a 100644
|
||||
--- a/src/util/virdevmapper.c
|
||||
+++ b/src/util/virdevmapper.c
|
||||
@@ -46,11 +46,9 @@
|
||||
|
||||
G_STATIC_ASSERT(BUF_SIZE > sizeof(struct dm_ioctl));
|
||||
|
||||
-static unsigned int virDMMajor;
|
||||
-
|
||||
|
||||
static int
|
||||
-virDevMapperOnceInit(void)
|
||||
+virDevMapperGetMajor(unsigned int *major)
|
||||
{
|
||||
g_autofree char *buf = NULL;
|
||||
VIR_AUTOSTRINGLIST lines = NULL;
|
||||
@@ -69,7 +67,7 @@ virDevMapperOnceInit(void)
|
||||
|
||||
if (sscanf(lines[i], "%u %ms\n", &maj, &dev) == 2 &&
|
||||
STREQ(dev, DM_NAME)) {
|
||||
- virDMMajor = maj;
|
||||
+ *major = maj;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -85,9 +83,6 @@ virDevMapperOnceInit(void)
|
||||
}
|
||||
|
||||
|
||||
-VIR_ONCE_GLOBAL_INIT(virDevMapper);
|
||||
-
|
||||
-
|
||||
static void *
|
||||
virDMIoctl(int controlFD, int cmd, struct dm_ioctl *dm, char **buf)
|
||||
{
|
||||
@@ -305,9 +300,6 @@ virDevMapperGetTargets(const char *path,
|
||||
* consist of devices or yet another targets. If that's the
|
||||
* case, we have to stop recursion somewhere. */
|
||||
|
||||
- if (virDevMapperInitialize() < 0)
|
||||
- return -1;
|
||||
-
|
||||
if ((controlFD = virDMOpen()) < 0)
|
||||
return -1;
|
||||
|
||||
@@ -319,13 +311,14 @@ bool
|
||||
virIsDevMapperDevice(const char *dev_name)
|
||||
{
|
||||
struct stat buf;
|
||||
+ unsigned int major;
|
||||
|
||||
- if (virDevMapperInitialize() < 0)
|
||||
+ if (virDevMapperGetMajor(&major) < 0)
|
||||
return false;
|
||||
|
||||
if (!stat(dev_name, &buf) &&
|
||||
S_ISBLK(buf.st_mode) &&
|
||||
- major(buf.st_rdev) == virDMMajor)
|
||||
+ major(buf.st_rdev) == major)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
@@ -1,76 +0,0 @@
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 18 Aug 2020 11:04:24 +0200
|
||||
Subject: [PATCH] virdevmapper: Handle kernel without device-mapper support
|
||||
|
||||
In one of my latest patch (v6.6.0~30) I was trying to remove
|
||||
libdevmapper use in favor of our own implementation. However, the
|
||||
code did not take into account that device mapper can be not
|
||||
compiled into the kernel (e.g. be a separate module that's not
|
||||
loaded) in which case /proc/devices won't have the device-mapper
|
||||
major number and thus virDevMapperGetTargets() and/or
|
||||
virIsDevMapperDevice() fails.
|
||||
|
||||
However, such failure is safe to ignore, because if device mapper
|
||||
is missing then there can't be any multipath devices and thus we
|
||||
don't need to allow the deps in CGroups, nor create them in the
|
||||
domain private namespace, etc.
|
||||
|
||||
Fixes: 22494556542c676d1b9e7f1c1f2ea13ac17e1e3e
|
||||
Reported-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reported-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
(cherry picked from commit feb8564a3cc63bc8f68284063d53ec0d2d81a1cc)
|
||||
---
|
||||
src/util/virdevmapper.c | 20 ++++++++++++++++++--
|
||||
1 file changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c
|
||||
index b43dbefa9a..a81e2edee4 100644
|
||||
--- a/src/util/virdevmapper.c
|
||||
+++ b/src/util/virdevmapper.c
|
||||
@@ -54,6 +54,9 @@ virDevMapperGetMajor(unsigned int *major)
|
||||
VIR_AUTOSTRINGLIST lines = NULL;
|
||||
size_t i;
|
||||
|
||||
+ if (!virFileExists(CONTROL_PATH))
|
||||
+ return -2;
|
||||
+
|
||||
if (virFileReadAll(PROC_DEVICES, BUF_SIZE, &buf) < 0)
|
||||
return -1;
|
||||
|
||||
@@ -126,8 +129,13 @@ virDMOpen(void)
|
||||
|
||||
memset(&dm, 0, sizeof(dm));
|
||||
|
||||
- if ((controlFD = open(CONTROL_PATH, O_RDWR)) < 0)
|
||||
+ if ((controlFD = open(CONTROL_PATH, O_RDWR)) < 0) {
|
||||
+ if (errno == ENOENT)
|
||||
+ return -2;
|
||||
+
|
||||
+ virReportSystemError(errno, _("Unable to open %s"), CONTROL_PATH);
|
||||
return -1;
|
||||
+ }
|
||||
|
||||
if (!virDMIoctl(controlFD, DM_VERSION, &dm, &tmp)) {
|
||||
virReportSystemError(errno, "%s",
|
||||
@@ -300,8 +308,16 @@ virDevMapperGetTargets(const char *path,
|
||||
* consist of devices or yet another targets. If that's the
|
||||
* case, we have to stop recursion somewhere. */
|
||||
|
||||
- if ((controlFD = virDMOpen()) < 0)
|
||||
+ if ((controlFD = virDMOpen()) < 0) {
|
||||
+ if (controlFD == -2) {
|
||||
+ /* The CONTROL_PATH doesn't exist. Probably the
|
||||
+ * module isn't loaded, yet. Don't error out, just
|
||||
+ * exit. */
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
return -1;
|
||||
+ }
|
||||
|
||||
return virDevMapperGetTargetsImpl(controlFD, path, devPaths, ttl);
|
||||
}
|
||||
@@ -1,77 +0,0 @@
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Wed, 19 Aug 2020 13:35:55 +0200
|
||||
Subject: [PATCH] virdevmapper: Ignore all errors when opening
|
||||
/dev/mapper/control
|
||||
|
||||
So far, only ENOENT is ignored (to deal with kernels without
|
||||
devmapper). However, as reported on the list, under certain
|
||||
scenarios a different error can occur. For instance, when libvirt
|
||||
is running inside a container which doesn't have permissions to
|
||||
talk to the devmapper. If this is the case, then open() returns
|
||||
-1 and sets errno=EPERM.
|
||||
|
||||
Assuming that multipath devices are fairly narrow use case and
|
||||
using them in a restricted container is even more narrow the best
|
||||
fix seems to be to ignore all open errors BUT produce a warning
|
||||
on failure. To avoid flooding logs with warnings on kernels
|
||||
without devmapper the level is reduced to a plain debug message.
|
||||
|
||||
Reported-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 53d9af1e7924757e3b5f661131dd707d7110d094)
|
||||
---
|
||||
src/util/virdevmapper.c | 23 +++++++++++++++--------
|
||||
1 file changed, 15 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c
|
||||
index a81e2edee4..ee2fab5ae3 100644
|
||||
--- a/src/util/virdevmapper.c
|
||||
+++ b/src/util/virdevmapper.c
|
||||
@@ -35,9 +35,12 @@
|
||||
# include "viralloc.h"
|
||||
# include "virstring.h"
|
||||
# include "virfile.h"
|
||||
+# include "virlog.h"
|
||||
|
||||
# define VIR_FROM_THIS VIR_FROM_STORAGE
|
||||
|
||||
+VIR_LOG_INIT("util.virdevmapper");
|
||||
+
|
||||
# define PROC_DEVICES "/proc/devices"
|
||||
# define DM_NAME "device-mapper"
|
||||
# define DEV_DM_DIR "/dev/" DM_DIR
|
||||
@@ -130,11 +133,15 @@ virDMOpen(void)
|
||||
memset(&dm, 0, sizeof(dm));
|
||||
|
||||
if ((controlFD = open(CONTROL_PATH, O_RDWR)) < 0) {
|
||||
- if (errno == ENOENT)
|
||||
- return -2;
|
||||
-
|
||||
- virReportSystemError(errno, _("Unable to open %s"), CONTROL_PATH);
|
||||
- return -1;
|
||||
+ /* We can't talk to devmapper. Produce a warning and let
|
||||
+ * the caller decide what to do next. */
|
||||
+ if (errno == ENOENT) {
|
||||
+ VIR_DEBUG("device mapper not available");
|
||||
+ } else {
|
||||
+ VIR_WARN("unable to open %s: %s",
|
||||
+ CONTROL_PATH, g_strerror(errno));
|
||||
+ }
|
||||
+ return -2;
|
||||
}
|
||||
|
||||
if (!virDMIoctl(controlFD, DM_VERSION, &dm, &tmp)) {
|
||||
@@ -310,9 +317,9 @@ virDevMapperGetTargets(const char *path,
|
||||
|
||||
if ((controlFD = virDMOpen()) < 0) {
|
||||
if (controlFD == -2) {
|
||||
- /* The CONTROL_PATH doesn't exist. Probably the
|
||||
- * module isn't loaded, yet. Don't error out, just
|
||||
- * exit. */
|
||||
+ /* The CONTROL_PATH doesn't exist or is unusable.
|
||||
+ * Probably the module isn't loaded, yet. Don't error
|
||||
+ * out, just exit. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Wed, 4 Nov 2020 12:08:19 +0100
|
||||
Subject: [PATCH] util: use g_autofree in virSCSIHostGetUniqueId
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
Reviewed-by: Erik Skultety <eskultet@redhat.com>
|
||||
(cherry picked from commit 843b70995471c1a20822ee62ff084310066b4b4a)
|
||||
---
|
||||
src/util/virscsihost.c | 16 +++++-----------
|
||||
1 file changed, 5 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/util/virscsihost.c b/src/util/virscsihost.c
|
||||
index 7d8e5299b8..4e6d8f7ad6 100644
|
||||
--- a/src/util/virscsihost.c
|
||||
+++ b/src/util/virscsihost.c
|
||||
@@ -46,17 +46,16 @@ int
|
||||
virSCSIHostGetUniqueId(const char *sysfs_prefix,
|
||||
int host)
|
||||
{
|
||||
- char *sysfs_path = NULL;
|
||||
+ g_autofree char *sysfs_path = NULL;
|
||||
char *p = NULL;
|
||||
- int ret = -1;
|
||||
- char *buf = NULL;
|
||||
+ g_autofree char *buf = NULL;
|
||||
int unique_id;
|
||||
|
||||
sysfs_path = g_strdup_printf("%s/host%d/unique_id",
|
||||
sysfs_prefix ? sysfs_prefix : SYSFS_SCSI_HOST_PATH, host);
|
||||
|
||||
if (virFileReadAll(sysfs_path, 1024, &buf) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if ((p = strchr(buf, '\n')))
|
||||
*p = '\0';
|
||||
@@ -65,15 +64,10 @@ virSCSIHostGetUniqueId(const char *sysfs_prefix,
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("unable to parse unique_id: %s"), buf);
|
||||
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
- ret = unique_id;
|
||||
-
|
||||
- cleanup:
|
||||
- VIR_FREE(sysfs_path);
|
||||
- VIR_FREE(buf);
|
||||
- return ret;
|
||||
+ return unique_id;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Wed, 4 Nov 2020 12:29:07 +0100
|
||||
Subject: [PATCH] util: quieten virSCSIHostGetUniqueId
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The only caller of this function ignores failure
|
||||
and just sets the unique_id to -1.
|
||||
|
||||
Failing to read the file is likely to the device no longer
|
||||
being present, not a real error.
|
||||
|
||||
Stop reporting errors in this function.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1692100
|
||||
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
Reviewed-by: Erik Skultety <eskultet@redhat.com>
|
||||
(cherry picked from commit 4a56278e770c972dbee7be5842b557de152a586e)
|
||||
---
|
||||
src/util/virscsihost.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/util/virscsihost.c b/src/util/virscsihost.c
|
||||
index 4e6d8f7ad6..b1d51b40d3 100644
|
||||
--- a/src/util/virscsihost.c
|
||||
+++ b/src/util/virscsihost.c
|
||||
@@ -41,6 +41,8 @@ VIR_LOG_INIT("util.scsi_host");
|
||||
* Read the value of the "scsi_host" unique_id file.
|
||||
*
|
||||
* Returns the value on success or -1 on failure.
|
||||
+ *
|
||||
+ * No errors are reported.
|
||||
*/
|
||||
int
|
||||
virSCSIHostGetUniqueId(const char *sysfs_prefix,
|
||||
@@ -54,16 +56,14 @@ virSCSIHostGetUniqueId(const char *sysfs_prefix,
|
||||
sysfs_path = g_strdup_printf("%s/host%d/unique_id",
|
||||
sysfs_prefix ? sysfs_prefix : SYSFS_SCSI_HOST_PATH, host);
|
||||
|
||||
- if (virFileReadAll(sysfs_path, 1024, &buf) < 0)
|
||||
+ if (virFileReadAllQuiet(sysfs_path, 1024, &buf) < 0)
|
||||
return -1;
|
||||
|
||||
if ((p = strchr(buf, '\n')))
|
||||
*p = '\0';
|
||||
|
||||
if (virStrToLong_i(buf, NULL, 10, &unique_id) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- _("unable to parse unique_id: %s"), buf);
|
||||
-
|
||||
+ VIR_DEBUG("unable to parse unique_id: '%s'", buf);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 17 Nov 2020 12:56:39 +0100
|
||||
Subject: [PATCH] node_device: Use "udev" monitor source
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
In v6.3.0-rc1~67 I've made a switch: instead of listening on udev
|
||||
events the nodedev driver started listening for kernel events.
|
||||
This was because when a device changes its name (e.g. NICs) we
|
||||
will get "move" event with DEVPATH_OLD property set, which we can
|
||||
then use to remove the old device and thus keep our internal list
|
||||
up to date. The switch to "kernel" source was made because if the
|
||||
old NICs naming (eth0, eth1, ...) is enabled (e.g. via
|
||||
net.ifnames=0 on the kernel cmd line) then udev overwrites the
|
||||
property with the new name making our internal list go out of
|
||||
sync. Interestingly, when the od NICs naming is not enabled then
|
||||
the DEVPATH_OLD contains the correct value.
|
||||
|
||||
But as it turns out, "kernel" source might be missing some other
|
||||
important properties, e.g. USB vendor/product IDs. Therefore,
|
||||
switch back to "udev" source and wish the best of luck to users
|
||||
using the old NICs naming.
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1897625
|
||||
Fixes: 9a13704818e4a018723e0ec5b9e97b176f1c8584
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
(cherry picked from commit 7e67a136dab9034dd3cb2ed76fa90c524c800cde)
|
||||
---
|
||||
src/node_device/node_device_udev.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
|
||||
index ff558efb83..b7fbd42fa1 100644
|
||||
--- a/src/node_device/node_device_udev.c
|
||||
+++ b/src/node_device/node_device_udev.c
|
||||
@@ -1878,7 +1878,7 @@ nodeStateInitialize(bool privileged,
|
||||
|
||||
virObjectLock(priv);
|
||||
|
||||
- priv->udev_monitor = udev_monitor_new_from_netlink(udev, "kernel");
|
||||
+ priv->udev_monitor = udev_monitor_new_from_netlink(udev, "udev");
|
||||
if (!priv->udev_monitor) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("udev_monitor_new_from_netlink returned NULL"));
|
||||
@@ -0,0 +1,21 @@
|
||||
# Makefile for source rpm: libvirt
|
||||
# $Id$
|
||||
NAME := libvirt
|
||||
SPECFILE = $(firstword $(wildcard *.spec))
|
||||
|
||||
define find-makefile-common
|
||||
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
|
||||
endef
|
||||
|
||||
MAKEFILE_COMMON := $(shell $(find-makefile-common))
|
||||
|
||||
ifeq ($(MAKEFILE_COMMON),)
|
||||
# attempt a checkout
|
||||
define checkout-makefile-common
|
||||
test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
|
||||
endef
|
||||
|
||||
MAKEFILE_COMMON := $(shell $(checkout-makefile-common))
|
||||
endif
|
||||
|
||||
include $(MAKEFILE_COMMON)
|
||||
@@ -0,0 +1,34 @@
|
||||
From bcd4180124afa20580d720912e2179b3a2f9295a Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Veillard <veillard@redhat.com>
|
||||
Date: Mon, 5 Oct 2009 17:03:14 +0200
|
||||
Subject: [PATCH] 526769 change logrotate config default to weekly
|
||||
|
||||
* daemon/libvirtd.logrotate.in: change to weekly rotation of logs,
|
||||
keep a month worth of data and also extend to cover LXC and UML
|
||||
domain logs
|
||||
|
||||
(cherry picked from commit 529325bbdd050af89bda5a5c1a01b5553c49a57e)
|
||||
|
||||
Fedora-patch: libvirt-change-logrotate-config-to-weekly.patch
|
||||
---
|
||||
qemud/libvirtd.logrotate.in | 6 +++---
|
||||
1 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/qemud/libvirtd.logrotate.in b/qemud/libvirtd.logrotate.in
|
||||
index 9b42630..093651c 100644
|
||||
--- a/qemud/libvirtd.logrotate.in
|
||||
+++ b/qemud/libvirtd.logrotate.in
|
||||
@@ -1,7 +1,7 @@
|
||||
-@localstatedir@/log/libvirt/qemu/*.log {
|
||||
- daily
|
||||
+@localstatedir@/log/libvirt/qemu/*.log @localstatedir@/log/libvirt/uml/*.log @localstatedir@/log/libvirt/lxc/*.log {
|
||||
+ weekly
|
||||
missingok
|
||||
- rotate 7
|
||||
+ rotate 4
|
||||
compress
|
||||
delaycompress
|
||||
copytruncate
|
||||
--
|
||||
1.6.2.5
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
From 4721ceb9b85daabe53804627473b06ced821c695 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel P. Berrange <berrange@redhat.com>
|
||||
Date: Mon, 14 Sep 2009 11:23:20 +0100
|
||||
Subject: [PATCH] Allow control over QEMU audio backend
|
||||
|
||||
When using VNC for graphics + keyboard + mouse, we shouldn't
|
||||
then use the host OS for audio. Audio should go back over
|
||||
VNC.
|
||||
|
||||
When using SDL for graphics, we should use the host OS for
|
||||
audio since that's where the display is. We need to allow
|
||||
certain QEMU env variables to be passed through to guest
|
||||
too to allow choice of QEMU audio backend.
|
||||
|
||||
* qemud/libvirtd.sysconf: Mention QEMU/SDL audio env vars
|
||||
* src/qemu_conf.c: Passthrough QEMU/SDL audio env for SDL display,
|
||||
disable host audio for VNC display
|
||||
|
||||
(cherry picked from commit b08e6d38ae7a0ed70300d7d82107f83fddb60f44)
|
||||
|
||||
Fedora-patch: libvirt-disable-audio-backend.patch
|
||||
---
|
||||
qemud/libvirtd.sysconf | 8 ++++++++
|
||||
src/qemu_conf.c | 14 ++++++++++++++
|
||||
2 files changed, 22 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/qemud/libvirtd.sysconf b/qemud/libvirtd.sysconf
|
||||
index fe4596a..28080a0 100644
|
||||
--- a/qemud/libvirtd.sysconf
|
||||
+++ b/qemud/libvirtd.sysconf
|
||||
@@ -7,3 +7,11 @@
|
||||
|
||||
# Override Kerberos service keytab for SASL/GSSAPI
|
||||
#KRB5_KTNAME=/etc/libvirt/krb5.tab
|
||||
+
|
||||
+# Override the QEMU/SDL default audio driver probing when
|
||||
+# starting virtual machines using SDL graphics
|
||||
+#
|
||||
+# NB these have no effect for VMs using VNC
|
||||
+#QEMU_AUDIO_DRV=sdl
|
||||
+#
|
||||
+#SDL_AUDIODRIVER=pulse
|
||||
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
|
||||
index f92bcef..0dd0624 100644
|
||||
--- a/src/qemu_conf.c
|
||||
+++ b/src/qemu_conf.c
|
||||
@@ -2109,6 +2109,13 @@ int qemudBuildCommandLine(virConnectPtr conn,
|
||||
ADD_ARG_LIT("-k");
|
||||
ADD_ARG_LIT(def->graphics[0]->data.vnc.keymap);
|
||||
}
|
||||
+
|
||||
+ /* QEMU implements a VNC extension for providing audio, so we
|
||||
+ * set the audio backend to none, to prevent it opening the
|
||||
+ * host OS audio devices since that causes security issues
|
||||
+ * and is non-sensical when using VNC.
|
||||
+ */
|
||||
+ ADD_ENV_LIT("QEMU_AUDIO_DRV=none");
|
||||
} else if ((def->ngraphics == 1) &&
|
||||
def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) {
|
||||
char *xauth = NULL;
|
||||
@@ -2131,6 +2138,13 @@ int qemudBuildCommandLine(virConnectPtr conn,
|
||||
ADD_ENV(display);
|
||||
if (def->graphics[0]->data.sdl.fullscreen)
|
||||
ADD_ARG_LIT("-full-screen");
|
||||
+
|
||||
+ /* If using SDL for video, then we should just let it
|
||||
+ * use QEMU's host audio drivers, possibly SDL too
|
||||
+ * User can set these two before starting libvirtd
|
||||
+ */
|
||||
+ ADD_ENV_COPY("QEMU_AUDIO_DRV");
|
||||
+ ADD_ENV_COPY("SDL_AUDIODRIVER");
|
||||
}
|
||||
|
||||
if (def->nvideos) {
|
||||
--
|
||||
1.6.2.5
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
From 58c38896a67c170063401d8091bae7dca8842923 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Wed, 23 Sep 2009 18:46:23 +0200
|
||||
Subject: [PATCH] Fix a typo in virDiskHasValidPciAddr()
|
||||
|
||||
(cherry-picked from commit 3620e3cdcfe56cc4475b5ef1a0a893757240b795)
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Fedora-patch: libvirt-fix-device-detach-typo1.patch
|
||||
---
|
||||
src/domain_conf.h | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/src/domain_conf.h b/src/domain_conf.h
|
||||
index 09368d9..d494e54 100644
|
||||
--- a/src/domain_conf.h
|
||||
+++ b/src/domain_conf.h
|
||||
@@ -125,7 +125,7 @@ struct _virDomainDiskDef {
|
||||
static inline int
|
||||
virDiskHasValidPciAddr(virDomainDiskDefPtr def)
|
||||
{
|
||||
- return def->pci_addr.domain || def->pci_addr.domain || def->pci_addr.slot;
|
||||
+ return def->pci_addr.domain || def->pci_addr.bus || def->pci_addr.slot;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
1.6.2.5
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
From 81e967c716ce8c085be8baad9169f7772452d187 Mon Sep 17 00:00:00 2001
|
||||
From: Mark McLoughlin <markmc@redhat.com>
|
||||
Date: Thu, 24 Sep 2009 08:55:55 +0100
|
||||
Subject: [PATCH] Fix a typo in virNetHasValidPciAddr() too
|
||||
|
||||
* src/domain_conf.h: check domain/bus/slot, not domain/domain/slot
|
||||
|
||||
(cherry-picked from commit 6bfffce91635bb08de601747e94ed1182c0f47eb)
|
||||
|
||||
Fedora-patch: libvirt-fix-device-detach-typo2.patch
|
||||
---
|
||||
src/domain_conf.h | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/src/domain_conf.h b/src/domain_conf.h
|
||||
index d494e54..7c918a7 100644
|
||||
--- a/src/domain_conf.h
|
||||
+++ b/src/domain_conf.h
|
||||
@@ -207,7 +207,7 @@ struct _virDomainNetDef {
|
||||
static inline int
|
||||
virNetHasValidPciAddr(virDomainNetDefPtr def)
|
||||
{
|
||||
- return def->pci_addr.domain || def->pci_addr.domain || def->pci_addr.slot;
|
||||
+ return def->pci_addr.domain || def->pci_addr.bus || def->pci_addr.slot;
|
||||
}
|
||||
|
||||
enum virDomainChrSrcType {
|
||||
--
|
||||
1.6.2.5
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
From 3a64779ec5a89d38d64e07bca2b11b19e1882d7a Mon Sep 17 00:00:00 2001
|
||||
From: Charles Duffy <charles@dyfis.net>
|
||||
Date: Thu, 24 Sep 2009 09:00:24 +0100
|
||||
Subject: [PATCH] Fix unitialized variable in qemudDomainDetachHostPciDevice()
|
||||
|
||||
* src/qemu_driver.c: initialize detach var
|
||||
|
||||
(cherry-picked from commit 580ad29288751234bee47ac9f6c04dac1dc529ea)
|
||||
|
||||
Fedora-patch: libvirt-fix-device-detach-typo3.patch
|
||||
---
|
||||
src/qemu_driver.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
|
||||
index 7c7b985..550a59c 100644
|
||||
--- a/src/qemu_driver.c
|
||||
+++ b/src/qemu_driver.c
|
||||
@@ -6126,7 +6126,7 @@ static int qemudDomainDetachHostPciDevice(virConnectPtr conn,
|
||||
virDomainObjPtr vm,
|
||||
virDomainDeviceDefPtr dev)
|
||||
{
|
||||
- virDomainHostdevDefPtr detach;
|
||||
+ virDomainHostdevDefPtr detach = NULL;
|
||||
char *cmd, *reply;
|
||||
int i, ret;
|
||||
pciDevice *pci;
|
||||
--
|
||||
1.6.2.5
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
From 7692e1e19487c28454b1e5f6488d5574c70883f2 Mon Sep 17 00:00:00 2001
|
||||
From: Chris Lalancette <clalance@redhat.com>
|
||||
Date: Mon, 21 Sep 2009 14:53:31 +0200
|
||||
Subject: [PATCH] Don't do virSetConnError when virDrvSupportsFeature is successful.
|
||||
|
||||
Signed-off-by: Chris Lalancette <clalance@redhat.com>
|
||||
Fedora-patch: libvirt-fix-drv-supports-feature-bogus-error.patch
|
||||
---
|
||||
src/libvirt.c | 7 +++++--
|
||||
1 files changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/libvirt.c b/src/libvirt.c
|
||||
index 4a11688..fa59dc7 100644
|
||||
--- a/src/libvirt.c
|
||||
+++ b/src/libvirt.c
|
||||
@@ -1349,8 +1349,11 @@ virDrvSupportsFeature (virConnectPtr conn, int feature)
|
||||
}
|
||||
|
||||
ret = VIR_DRV_SUPPORTS_FEATURE (conn->driver, conn, feature);
|
||||
- /* Copy to connection error object for back compatability */
|
||||
- virSetConnError(conn);
|
||||
+
|
||||
+ if (ret < 0)
|
||||
+ /* Copy to connection error object for back compatability */
|
||||
+ virSetConnError(conn);
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
1.6.2.5
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
From 71de8d92f20a9a9ee76d4d5df77ff477f1b7d441 Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Bolte <matthias.bolte@googlemail.com>
|
||||
Date: Wed, 30 Sep 2009 02:17:27 +0200
|
||||
Subject: [PATCH] Fix memory leaks in libvirtd's message processing
|
||||
|
||||
Commit 47cab734995fa9521b1df05d37e9978eedd8d3a2 changed the way how
|
||||
qemud_client_message objects were reused. Before this commit
|
||||
remoteDispatchClientRequest() reused the received message for normal responses
|
||||
and to report non-fatal errors. If a fatal error occurred qemudWorker() frees
|
||||
the message. After this commit non-fatal errors are reported by
|
||||
remoteSerializeReplyError() using a new qemud_client_message object and the
|
||||
original message leaks.
|
||||
|
||||
To fix this leak the original message has to be freed if
|
||||
remoteSerializeReplyError() succeeds. If remoteSerializeReplyError()
|
||||
fails the original message is freed in qemudWorker().
|
||||
|
||||
* daemon/dispatch.c: free qemud_client_message objects that will not be reused
|
||||
and would leak otherwise, also free the allocated qemud_client_message object
|
||||
in remoteSerializeError() if an error occurs
|
||||
|
||||
(cherry-picked from commit c6f1459eb998619ab21a92d9bb87341f26978181)
|
||||
|
||||
Fedora-patch: libvirt-fix-libvirtd-leak-in-error-reply.patch
|
||||
---
|
||||
qemud/dispatch.c | 15 +++++++++++++--
|
||||
1 files changed, 13 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/qemud/dispatch.c b/qemud/dispatch.c
|
||||
index a60f2f4..ddb3215 100644
|
||||
--- a/qemud/dispatch.c
|
||||
+++ b/qemud/dispatch.c
|
||||
@@ -191,6 +191,7 @@ remoteSerializeError(struct qemud_client *client,
|
||||
|
||||
xdr_error:
|
||||
xdr_destroy(&xdr);
|
||||
+ VIR_FREE(msg);
|
||||
fatal_error:
|
||||
xdr_free((xdrproc_t)xdr_remote_error, (char *)rerr);
|
||||
return -1;
|
||||
@@ -336,6 +337,7 @@ remoteDispatchClientRequest (struct qemud_server *server,
|
||||
struct qemud_client *client,
|
||||
struct qemud_client_message *msg)
|
||||
{
|
||||
+ int ret;
|
||||
remote_error rerr;
|
||||
|
||||
memset(&rerr, 0, sizeof rerr);
|
||||
@@ -364,7 +366,12 @@ remoteDispatchClientRequest (struct qemud_server *server,
|
||||
}
|
||||
|
||||
error:
|
||||
- return remoteSerializeReplyError(client, &rerr, &msg->hdr);
|
||||
+ ret = remoteSerializeReplyError(client, &rerr, &msg->hdr);
|
||||
+
|
||||
+ if (ret >= 0)
|
||||
+ VIR_FREE(msg);
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -521,8 +528,12 @@ remoteDispatchClientCall (struct qemud_server *server,
|
||||
rpc_error:
|
||||
/* Semi-bad stuff happened, we can still try to send back
|
||||
* an RPC error message to client */
|
||||
- return remoteSerializeReplyError(client, &rerr, &msg->hdr);
|
||||
+ rv = remoteSerializeReplyError(client, &rerr, &msg->hdr);
|
||||
+
|
||||
+ if (rv >= 0)
|
||||
+ VIR_FREE(msg);
|
||||
|
||||
+ return rv;
|
||||
|
||||
xdr_error:
|
||||
/* Seriously bad stuff happened, so we'll kill off this client
|
||||
--
|
||||
1.6.2.5
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
From ba585ed6cff624c6c0f1f9801382fd6846466ee0 Mon Sep 17 00:00:00 2001
|
||||
From: Mark McLoughlin <markmc@redhat.com>
|
||||
Date: Thu, 17 Sep 2009 15:31:08 +0100
|
||||
Subject: [PATCH] Fix net/disk hot-unplug segfault
|
||||
|
||||
When we hot-unplug the last device, we're currently double-freeing
|
||||
the device definition.
|
||||
|
||||
Reported by Michal Nowak here:
|
||||
|
||||
https://bugzilla.redhat.com/523953
|
||||
|
||||
* src/qemu_driver.c: fix double free
|
||||
|
||||
(cherry-picked from commit 8881ae1bf8783006777429403cc543c33187175d)
|
||||
|
||||
Fedora-patch: libvirt-fix-net-hotunplug-double-free.patch
|
||||
---
|
||||
src/qemu_driver.c | 4 ++--
|
||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
|
||||
index a65334f..de31581 100644
|
||||
--- a/src/qemu_driver.c
|
||||
+++ b/src/qemu_driver.c
|
||||
@@ -5998,7 +5998,7 @@ try_command:
|
||||
/* ignore, harmless */
|
||||
}
|
||||
} else {
|
||||
- VIR_FREE(vm->def->disks[0]);
|
||||
+ VIR_FREE(vm->def->disks);
|
||||
vm->def->ndisks = 0;
|
||||
}
|
||||
virDomainDiskDefFree(detach);
|
||||
@@ -6100,7 +6100,7 @@ qemudDomainDetachNetDevice(virConnectPtr conn,
|
||||
/* ignore, harmless */
|
||||
}
|
||||
} else {
|
||||
- VIR_FREE(vm->def->nets[0]);
|
||||
+ VIR_FREE(vm->def->nets);
|
||||
vm->def->nnets = 0;
|
||||
}
|
||||
virDomainNetDefFree(detach);
|
||||
--
|
||||
1.6.2.5
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
From 17831d20051f8de8f1f7d661e8a23f4fe67c2153 Mon Sep 17 00:00:00 2001
|
||||
From: Mark McLoughlin <markmc@redhat.com>
|
||||
Date: Thu, 17 Sep 2009 15:32:45 +0100
|
||||
Subject: [PATCH] Fix leak in PCI hostdev hot-unplug
|
||||
|
||||
* src/qemu_driver.c: sync the hostdev hot-unplug code with the disk/net
|
||||
code.
|
||||
|
||||
(cherry-picked from commit a70da51ff76ed860bfc0cdee2e1d556da997c557)
|
||||
|
||||
Fedora-patch: libvirt-fix-pci-hostdev-hotunplug-leak.patch
|
||||
---
|
||||
src/qemu_driver.c | 20 +++++++++++++-------
|
||||
1 files changed, 13 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
|
||||
index de31581..2ddcdc0 100644
|
||||
--- a/src/qemu_driver.c
|
||||
+++ b/src/qemu_driver.c
|
||||
@@ -6206,14 +6206,20 @@ static int qemudDomainDetachHostPciDevice(virConnectPtr conn,
|
||||
pciFreeDevice(conn, pci);
|
||||
}
|
||||
|
||||
- if (i != --vm->def->nhostdevs)
|
||||
- memmove(&vm->def->hostdevs[i],
|
||||
- &vm->def->hostdevs[i+1],
|
||||
- sizeof(*vm->def->hostdevs) * (vm->def->nhostdevs-i));
|
||||
- if (VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs) < 0) {
|
||||
- virReportOOMError(conn);
|
||||
- ret = -1;
|
||||
+ if (vm->def->nhostdevs > 1) {
|
||||
+ memmove(vm->def->hostdevs + i,
|
||||
+ vm->def->hostdevs + i + 1,
|
||||
+ sizeof(*vm->def->hostdevs) *
|
||||
+ (vm->def->nhostdevs - (i + 1)));
|
||||
+ vm->def->nhostdevs--;
|
||||
+ if (VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs) < 0) {
|
||||
+ /* ignore, harmless */
|
||||
+ }
|
||||
+ } else {
|
||||
+ VIR_FREE(vm->def->hostdevs);
|
||||
+ vm->def->nhostdevs = 0;
|
||||
}
|
||||
+ virDomainHostdevDefFree(detach);
|
||||
|
||||
return ret;
|
||||
}
|
||||
--
|
||||
1.6.2.5
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
From f1be5a4714e194a84840343e0937fe62463a18dc Mon Sep 17 00:00:00 2001
|
||||
From: Charles Duffy <Charles_Duffy@dell.com>
|
||||
Date: Fri, 18 Sep 2009 11:32:35 -0500
|
||||
Subject: [PATCH] Prevent attempt to call cat -c during virDomainSave to raw
|
||||
|
||||
Fedora-patch: libvirt-fix-qemu-raw-format-save.patch
|
||||
---
|
||||
src/qemu_driver.c | 28 ++++++++++++++++++----------
|
||||
1 files changed, 18 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
|
||||
index 2ddcdc0..7c7b985 100644
|
||||
--- a/src/qemu_driver.c
|
||||
+++ b/src/qemu_driver.c
|
||||
@@ -3905,17 +3905,25 @@ static int qemudDomainSave(virDomainPtr dom,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- const char *prog = qemudSaveCompressionTypeToString(header.compressed);
|
||||
- if (prog == NULL) {
|
||||
- qemudReportError(dom->conn, dom, NULL, VIR_ERR_INTERNAL_ERROR,
|
||||
- _("Invalid compress format %d"), header.compressed);
|
||||
- goto cleanup;
|
||||
- }
|
||||
+ {
|
||||
+ const char *prog = qemudSaveCompressionTypeToString(header.compressed);
|
||||
+ const char *args;
|
||||
|
||||
- if (STREQ (prog, "raw"))
|
||||
- prog = "cat";
|
||||
- internalret = virAsprintf(&command, "migrate \"exec:"
|
||||
- "%s -c >> '%s' 2>/dev/null\"", prog, safe_path);
|
||||
+ if (prog == NULL) {
|
||||
+ qemudReportError(dom->conn, dom, NULL, VIR_ERR_INTERNAL_ERROR,
|
||||
+ _("Invalid compress format %d"), header.compressed);
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+
|
||||
+ if (STREQ (prog, "raw")) {
|
||||
+ prog = "cat";
|
||||
+ args = "";
|
||||
+ } else {
|
||||
+ args = "-c";
|
||||
+ }
|
||||
+ internalret = virAsprintf(&command, "migrate \"exec:"
|
||||
+ "%s %s >> '%s' 2>/dev/null\"", prog, args, safe_path);
|
||||
+ }
|
||||
|
||||
if (internalret < 0) {
|
||||
virReportOOMError(dom->conn);
|
||||
--
|
||||
1.6.2.5
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
From 0b846a30468a6b4586407f020ccde7bb51afaf98 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel P. Berrange <berrange@redhat.com>
|
||||
Date: Mon, 12 Oct 2009 20:03:50 +0100
|
||||
Subject: [PATCH] Fix QEMU restore from file in raw format
|
||||
|
||||
The logic for running the decompression programs was broken in
|
||||
commit f238709304f9f6c57204cdd943e542cbae38fa5f, so that for
|
||||
non-raw formats the decompression program was never run, and
|
||||
for raw formats, it tried to exec an argv[] with initial NULL
|
||||
in the program name.
|
||||
|
||||
* src/qemu/qemu_driver.c: Fix logic in runing decompression program
|
||||
|
||||
(cherry picked from commit 74b379cbd5ba9f472a3a2d5710e497966b1a3a37)
|
||||
|
||||
Fedora-patch: libvirt-fix-qemu-restore-from-raw1.patch
|
||||
---
|
||||
src/qemu_driver.c | 3 +--
|
||||
1 files changed, 1 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
|
||||
index 550a59c..0ce403c 100644
|
||||
--- a/src/qemu_driver.c
|
||||
+++ b/src/qemu_driver.c
|
||||
@@ -4541,9 +4541,8 @@ static int qemudDomainRestore(virConnectPtr conn,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- if (header.compressed != QEMUD_SAVE_FORMAT_RAW)
|
||||
+ if (header.compressed != QEMUD_SAVE_FORMAT_RAW) {
|
||||
intermediate_argv[0] = prog;
|
||||
- else {
|
||||
intermediatefd = fd;
|
||||
fd = -1;
|
||||
if (virExec(conn, intermediate_argv, NULL, NULL,
|
||||
--
|
||||
1.6.2.5
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
From 57d7cc602d14c6b50e2826e427a5de124e479f95 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel P. Berrange <berrange@redhat.com>
|
||||
Date: Mon, 12 Oct 2009 20:32:33 +0100
|
||||
Subject: [PATCH] Fix virFileReadLimFD/virFileReadAll to handle EINTR
|
||||
|
||||
The fread_file_lim() function uses fread() but never handles
|
||||
EINTR results, causing unexpected failures when reading QEMU
|
||||
help arg info. It was unneccessarily using FILE * instead
|
||||
of plain UNIX file handles, which prevented use of saferead()
|
||||
|
||||
* src/util/util.c: Switch fread_file_lim over to use saferead
|
||||
instead of fread, remove FILE * use, and rename
|
||||
|
||||
(cherry picked from commit 11a36d956cb8a5e439e535bff3e0cfce50a64bca)
|
||||
|
||||
Fedora-patch: libvirt-fix-qemu-restore-from-raw2.patch
|
||||
---
|
||||
src/util.c | 45 ++++++++++++---------------------------------
|
||||
1 files changed, 12 insertions(+), 33 deletions(-)
|
||||
|
||||
diff --git a/src/util.c b/src/util.c
|
||||
index 1878e33..7bc3a66 100644
|
||||
--- a/src/util.c
|
||||
+++ b/src/util.c
|
||||
@@ -887,7 +887,7 @@ virExec(virConnectPtr conn,
|
||||
number of bytes. If the length of the input is <= max_len, and
|
||||
upon error while reading that data, it works just like fread_file. */
|
||||
static char *
|
||||
-fread_file_lim (FILE *stream, size_t max_len, size_t *length)
|
||||
+saferead_lim (int fd, size_t max_len, size_t *length)
|
||||
{
|
||||
char *buf = NULL;
|
||||
size_t alloc = 0;
|
||||
@@ -895,8 +895,8 @@ fread_file_lim (FILE *stream, size_t max_len, size_t *length)
|
||||
int save_errno;
|
||||
|
||||
for (;;) {
|
||||
- size_t count;
|
||||
- size_t requested;
|
||||
+ int count;
|
||||
+ int requested;
|
||||
|
||||
if (size + BUFSIZ + 1 > alloc) {
|
||||
alloc += alloc / 2;
|
||||
@@ -912,12 +912,12 @@ fread_file_lim (FILE *stream, size_t max_len, size_t *length)
|
||||
/* Ensure that (size + requested <= max_len); */
|
||||
requested = MIN (size < max_len ? max_len - size : 0,
|
||||
alloc - size - 1);
|
||||
- count = fread (buf + size, 1, requested, stream);
|
||||
+ count = saferead (fd, buf + size, requested);
|
||||
size += count;
|
||||
|
||||
if (count != requested || requested == 0) {
|
||||
save_errno = errno;
|
||||
- if (ferror (stream))
|
||||
+ if (count < 0)
|
||||
break;
|
||||
buf[size] = '\0';
|
||||
*length = size;
|
||||
@@ -930,12 +930,12 @@ fread_file_lim (FILE *stream, size_t max_len, size_t *length)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
-/* A wrapper around fread_file_lim that maps a failure due to
|
||||
+/* A wrapper around saferead_lim that maps a failure due to
|
||||
exceeding the maximum size limitation to EOVERFLOW. */
|
||||
-static int virFileReadLimFP(FILE *fp, int maxlen, char **buf)
|
||||
+int virFileReadLimFD(int fd, int maxlen, char **buf)
|
||||
{
|
||||
size_t len;
|
||||
- char *s = fread_file_lim (fp, maxlen+1, &len);
|
||||
+ char *s = saferead_lim (fd, maxlen+1, &len);
|
||||
if (s == NULL)
|
||||
return -1;
|
||||
if (len > maxlen || (int)len != len) {
|
||||
@@ -949,37 +949,16 @@ static int virFileReadLimFP(FILE *fp, int maxlen, char **buf)
|
||||
return len;
|
||||
}
|
||||
|
||||
-/* Like virFileReadLimFP, but use a file descriptor rather than a FILE*. */
|
||||
-int virFileReadLimFD(int fd_arg, int maxlen, char **buf)
|
||||
-{
|
||||
- int fd = dup (fd_arg);
|
||||
- if (fd >= 0) {
|
||||
- FILE *fp = fdopen (fd, "r");
|
||||
- if (fp) {
|
||||
- int len = virFileReadLimFP (fp, maxlen, buf);
|
||||
- int saved_errno = errno;
|
||||
- fclose (fp);
|
||||
- errno = saved_errno;
|
||||
- return len;
|
||||
- } else {
|
||||
- int saved_errno = errno;
|
||||
- close (fd);
|
||||
- errno = saved_errno;
|
||||
- }
|
||||
- }
|
||||
- return -1;
|
||||
-}
|
||||
-
|
||||
int virFileReadAll(const char *path, int maxlen, char **buf)
|
||||
{
|
||||
- FILE *fh = fopen(path, "r");
|
||||
- if (fh == NULL) {
|
||||
+ int fd = open(path, O_RDONLY);
|
||||
+ if (fd < 0) {
|
||||
virReportSystemError(NULL, errno, _("Failed to open file '%s'"), path);
|
||||
return -1;
|
||||
}
|
||||
|
||||
- int len = virFileReadLimFP (fh, maxlen, buf);
|
||||
- fclose(fh);
|
||||
+ int len = virFileReadLimFD(fd, maxlen, buf);
|
||||
+ close(fd);
|
||||
if (len < 0) {
|
||||
virReportSystemError(NULL, errno, _("Failed to read file '%s'"), path);
|
||||
return -1;
|
||||
--
|
||||
1.6.2.5
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
From 6b12148864cf6a1d22a2cf4e0e9c48e9946331cb Mon Sep 17 00:00:00 2001
|
||||
From: Mark McLoughlin <markmc@redhat.com>
|
||||
Date: Wed, 30 Sep 2009 18:37:03 +0100
|
||||
Subject: [PATCH] Fix USB device re-labelling
|
||||
|
||||
A simple misplaced break out of a switch results in:
|
||||
|
||||
libvir: error : Failed to open file '/sys/bus/pci/devices/0000:00:54c./vendor': No such file or directory
|
||||
libvir: error : Failed to open file '/sys/bus/pci/devices/0000:00:54c./device': No such file or directory
|
||||
libvir: error : this function is not supported by the hypervisor: Failed to read product/vendor ID for 0000:00:54c.
|
||||
|
||||
when trying to passthrough a USB host device to qemu.
|
||||
|
||||
* src/security_selinux.c: fix a switch/break thinko
|
||||
|
||||
Fedora-patch: libvirt-fix-usb-device-passthrough.patch
|
||||
---
|
||||
src/security_selinux.c | 3 +--
|
||||
1 files changed, 1 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/security_selinux.c b/src/security_selinux.c
|
||||
index bc295b1..b4dc153 100644
|
||||
--- a/src/security_selinux.c
|
||||
+++ b/src/security_selinux.c
|
||||
@@ -464,12 +464,11 @@ SELinuxSetSecurityHostdevLabel(virConnectPtr conn,
|
||||
|
||||
ret = usbDeviceFileIterate(conn, usb, SELinuxSetSecurityUSBLabel, vm);
|
||||
usbFreeDevice(conn, usb);
|
||||
-
|
||||
- break;
|
||||
} else {
|
||||
/* XXX deal with product/vendor better */
|
||||
ret = 0;
|
||||
}
|
||||
+ break;
|
||||
}
|
||||
|
||||
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: {
|
||||
--
|
||||
1.6.2.5
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
From b7e3ac4f23befe67518b57e34691c301820a436c Mon Sep 17 00:00:00 2001
|
||||
From: Mark McLoughlin <markmc@redhat.com>
|
||||
Date: Tue, 6 Oct 2009 12:33:17 +0100
|
||||
Subject: [PATCH] Create /var/log/libvirt/{lxc,uml} dirs
|
||||
|
||||
Otherwise logrotate barfs:
|
||||
|
||||
error: error accessing /var/log/libvirt/uml: No such file or directory
|
||||
error: libvirtd:1 glob failed for /var/log/libvirt/uml/*.log
|
||||
error: found error in /var/log/libvirt/qemu/*.log /var/log/libvirt/uml/*.log /var/log/libvirt/lxc/*.log , skipping
|
||||
|
||||
* qemud/Makefile.am: always create /var/log/libvirt/{lxc,uml} when
|
||||
installing the logrotate conf; not ideal, but easier than making
|
||||
the logrotate conf depend on which drivers are enabled
|
||||
|
||||
Fedora-patch: libvirt-logrotate-create-lxc-uml-dirs.patch
|
||||
---
|
||||
qemud/Makefile.am | 6 ++++--
|
||||
1 files changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/qemud/Makefile.am b/qemud/Makefile.am
|
||||
index 3d143da..a7f4bdf 100644
|
||||
--- a/qemud/Makefile.am
|
||||
+++ b/qemud/Makefile.am
|
||||
@@ -176,7 +176,7 @@ install-data-local: install-init install-data-sasl install-data-polkit \
|
||||
test -e $(DESTDIR)$(sysconfdir)/libvirt/qemu/networks/autostart/default.xml || \
|
||||
ln -s ../default.xml \
|
||||
$(DESTDIR)$(sysconfdir)/libvirt/qemu/networks/autostart/default.xml
|
||||
- mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt/qemu
|
||||
+ mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt
|
||||
mkdir -p $(DESTDIR)$(localstatedir)/run/libvirt
|
||||
mkdir -p $(DESTDIR)$(localstatedir)/lib/libvirt
|
||||
|
||||
@@ -184,7 +184,7 @@ uninstall-local:: uninstall-init uninstall-data-sasl install-data-polkit
|
||||
rm -f $(DESTDIR)$(sysconfdir)/libvirt/qemu/networks/autostart/default.xml
|
||||
rm -f $(DESTDIR)$(sysconfdir)/$(default_xml_dest)
|
||||
rmdir $(DESTDIR)$(sysconfdir)/libvirt/qemu/networks/autostart || :
|
||||
- rmdir $(DESTDIR)$(localstatedir)/log/libvirt/qemu || :
|
||||
+ rmdir $(DESTDIR)$(localstatedir)/log/libvirt || :
|
||||
rmdir $(DESTDIR)$(localstatedir)/run/libvirt || :
|
||||
rmdir $(DESTDIR)$(localstatedir)/lib/libvirt || :
|
||||
|
||||
@@ -240,6 +240,8 @@ libvirtd.logrotate: libvirtd.logrotate.in
|
||||
|
||||
install-logrotate: libvirtd.logrotate
|
||||
mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt/qemu/
|
||||
+ mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt/lxc/
|
||||
+ mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt/uml/
|
||||
mkdir -p $(DESTDIR)$(sysconfdir)/logrotate.d/
|
||||
$(INSTALL_DATA) $< $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd
|
||||
|
||||
--
|
||||
1.6.2.5
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+919
-1872
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user