Re: [Libguestfs] libnbd | Failed pipeline for master | 70da51e5
by Richard W.M. Jones
Hi Martin,
On Thu, Sep 02, 2021 at 04:05:56PM +0000, GitLab wrote:
> GitLab
> ✖ Pipeline #364204388 has failed!
>
> Project nbdkit / libnbd
> Branch ● master
> Commit ● 70da51e5
> interop: Link interop-nbd-server-tls with -lgnu...
> Commit Author ● Richard W.M. Jones
>
> Pipeline #364204388 triggered by ● Richard W.M. Jones
> had 1 failed job.
> Failed jobs
> ✖ builds x64-opensuse-tumbleweed
> GitLab
This is failing on a new test I added, but it's failing because of how
a particular package is built in OpenSUSE.
The new test is:
https://gitlab.com/nbdkit/libnbd/-/commit/c833fa1226092fd51b1211fa195a2a3...
which tries to test libnbd client with TLS enabled against nbd-server.
nbd-server in OpenSUSE gives this error:
Error: inetd mode requires syslog
Exiting.
which means it was compiled without --enable-syslog.
I notice that the related test is skipped:
SKIP: interop-nbd-server
========================
Test skipped based on ci/skipped_tests file
SKIP interop-nbd-server (exit status: 77)
The format of ci/skipped_tests is pretty odd. Is this patch OK?
diff --git a/ci/skipped_tests b/ci/skipped_tests
index e2de9330..c494b9eb 100644
--- a/ci/skipped_tests
+++ b/ci/skipped_tests
@@ -1,9 +1,9 @@
# Old nbd-server and built without syslog support, tests deadlock, old qemu-img version
-^Ubuntu-18\.04$;interop/interop-nbd-server interop/list-exports-nbd-server interop/structured-read.sh
-^openSUSE Leap-15;interop/interop-nbd-server interop/list-exports-nbd-server
+^Ubuntu-18\.04$;interop/interop-nbd-server interop/interop-nbd-server-tls interop/list-exports-nbd-server interop/structured-read.sh
+^openSUSE Leap-15;interop/interop-nbd-server interop/interop-nbd-server-tls interop/list-exports-nbd-server
# Similar for Tumbleweed, except tests do not deadlock, only limit to version 2021* for now
-^openSUSE Tumbleweed-2021;interop/interop-nbd-server interop/list-exports-nbd-server
+^openSUSE Tumbleweed-2021;interop/interop-nbd-server interop/interop-nbd-server-tls interop/list-exports-nbd-server
# Debian 10 has weird golang issues (old golang anyway) and old qemu-img
^Debian GNU/Linux-10;golang/run-tests.sh interop/structured-read.sh
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-top is 'top' for virtual machines. Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top
2 years, 10 months
[nbdkit PATCH v3 0/3] common/include/checked-overflow: provide fallback
by Laszlo Ersek
v2:
- https://listman.redhat.com/archives/libguestfs/2021-November/msg00249.html
- https://listman.redhat.com/archives/libguestfs/2021-November/msg00255.html
Please see the Notes section on each patch.
I built this version on RHEL7 as well, and I ran the test suite. I had
to forcibly disable two tests, test-tls and test-cache-max-size, for the
suite to complete. I didn't know initially if this was expected on
RHEL7, but then I peeked at the CentOS 7 SRPM, and the spec file in that
disables numerous tests, including TLS and cache related ones.
Thanks,
Laszlo
Laszlo Ersek (3):
common: rename UNIQUE_VAR to UNIQUE_NAME, and move it to its own
header
utils/vector: pass only unsigned arguments to (ADD|MUL)_OVERFLOW
common/include/checked-overflow: provide fallback
.gitignore | 1 +
common/include/Makefile.am | 6 +
common/include/checked-overflow.h | 167 +++++++++++++++++++++--
common/include/test-checked-overflow.c | 177 +++++++++++++++++++++++++
common/include/unique-name.h | 41 ++++++
common/utils/cleanup.h | 31 ++---
common/utils/vector.c | 2 +-
configure.ac | 6 +
filters/exitwhen/Makefile.am | 3 +-
filters/ext2/Makefile.am | 3 +-
filters/limit/Makefile.am | 3 +-
filters/log/Makefile.am | 3 +-
filters/offset/Makefile.am | 3 +-
filters/xz/Makefile.am | 3 +-
plugins/cc/Makefile.am | 1 +
plugins/cdi/Makefile.am | 1 +
plugins/iso/Makefile.am | 1 +
plugins/memory/Makefile.am | 3 +-
plugins/ondemand/Makefile.am | 3 +-
plugins/perl/Makefile.am | 3 +-
plugins/python/Makefile.am | 3 +-
plugins/split/Makefile.am | 3 +-
plugins/tmpdisk/Makefile.am | 3 +-
server/internal.h | 2 +-
tests/Makefile.am | 6 +-
25 files changed, 434 insertions(+), 44 deletions(-)
create mode 100644 common/include/unique-name.h
create mode 100644 common/include/test-checked-overflow.c
base-commit: b9a2c12da886decf662f4e2bbcd1699a200676aa
--
2.19.1.3.g30247aa5d201
2 years, 11 months
[libnbd PATCH v2] python: Fix more callback memory leaks
by Eric Blake
Commit 89af010d ("python: Fix more memory leaks", v1.5.2) tried to
patch some python memory leaks on callback error paths. But it missed
an obvious one: we are mistakenly calling Py_INCREF on the result of
Py_BuildValue, which results in an object that is over-referenced and
thus never gets freed, leaking even on successful callbacks. Worse
but less likely, if Py_BuildValue fails due to no memory,
Py_INCREF(NULL) causes a crash. There are other leaks on early exit
paths, all solved by refactoring the callback FOO_wrapper() functions
to use an 'out:' label rather than early exits.
Finally, note that PyErr_SetObject increments the reference count
rather than stealing the object, and thus every time we call
raise_exception() (for any API failure, not just from a callback
error), we were leaking an object.
I tested this by watching the memory usage of:
$ nbdkit --no-sr memory 1
$ nbdsh -u nbd://localhost
nbd> def f(a, b, c, d, e):
... pass
...
nbd> def leak():
... for i in range(0, 100000):
... try:
... h.block_status(1, 0, f)
... except:
... pass
...
then repeatedly using leak().
Fixes: 936488d4 ("python: Implement Callback properly.", v0.1)
Fixes: 259d46cb ("python: Raise a custom exception containing error string and errno.", v0.1.6)
---
v1: https://listman.redhat.com/archives/libguestfs/2021-November/msg00280.html
In v2 - retitle subject, fix more leaks; watching memory usage of
nbdsh given the above test now no longer grows in memory as I repeat
leak().
generator/Python.ml | 51 ++++++++++++++++++++++++++++++---------------
1 file changed, 34 insertions(+), 17 deletions(-)
diff --git a/generator/Python.ml b/generator/Python.ml
index 49281bf..4ab18f6 100644
--- a/generator/Python.ml
+++ b/generator/Python.ml
@@ -1,6 +1,6 @@
(* hey emacs, this is OCaml code: -*- tuareg -*- *)
(* nbd client library in userspace: Python bindings
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2021 Red Hat Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -61,8 +61,10 @@ raise_exception ()
{
PyObject *args = Py_BuildValue (\"si\", nbd_get_error (), nbd_get_errno ());
- if (args != NULL)
+ if (args != NULL) {
PyErr_SetObject (nbd_internal_py_Error, args);
+ Py_DECREF (args);
+ }
}
";
@@ -161,29 +163,42 @@ let print_python_closure_wrapper { cbname; cbargs } =
pr "\n";
pr "{\n";
pr " const struct user_data *data = user_data;\n";
- pr " int ret = 0;\n";
+ pr " int ret = -1;\n";
pr "\n";
pr " PyGILState_STATE py_save = PyGILState_UNLOCKED;\n";
pr " PyObject *py_args, *py_ret;\n";
+ List.iter (
+ function
+ | CBArrayAndLen (UInt32 n, _) ->
+ pr " PyObject *py_%s = NULL;\n" n
+ | CBMutable (Int n) ->
+ pr " PyObject *py_%s = NULL;\n" n
+ | _ -> ()
+ ) cbargs;
+ pr "\n";
List.iter (
function
| CBArrayAndLen (UInt32 n, len) ->
- pr " PyObject *py_%s = PyList_New (%s);\n" n len;
+ pr " py_%s = PyList_New (%s);\n" n len;
+ pr " if (!py_%s) { PyErr_PrintEx (0); goto out; }\n" n;
pr " size_t i_%s;\n" n;
- pr " for (i_%s = 0; i_%s < %s; ++i_%s)\n" n n len n;
- pr " PyList_SET_ITEM (py_%s, i_%s, PyLong_FromUnsignedLong (%s[i_%s]));\n" n n n n
+ pr " for (i_%s = 0; i_%s < %s; ++i_%s) {\n" n n len n;
+ pr " PyObject *py_e_%s = PyLong_FromUnsignedLong (%s[i_%s]);\n" n n n;
+ pr " if (!py_e_%s) { PyErr_PrintEx (0); goto out; }\n" n;
+ pr " PyList_SET_ITEM (py_%s, i_%s, py_e_%s);\n" n n n;
+ pr " }\n"
| CBBytesIn _
| CBInt _
| CBInt64 _ -> ()
| CBMutable (Int n) ->
pr " PyObject *py_%s_modname = PyUnicode_FromString (\"ctypes\");\n" n;
- pr " if (!py_%s_modname) { PyErr_PrintEx (0); return -1; }\n" n;
+ pr " if (!py_%s_modname) { PyErr_PrintEx (0); goto out; }\n" n;
pr " PyObject *py_%s_mod = PyImport_Import (py_%s_modname);\n" n n;
pr " Py_DECREF (py_%s_modname);\n" n;
- pr " if (!py_%s_mod) { PyErr_PrintEx (0); return -1; }\n" n;
- pr " PyObject *py_%s = PyObject_CallMethod (py_%s_mod, \"c_int\", \"i\", *%s);\n" n n n;
+ pr " if (!py_%s_mod) { PyErr_PrintEx (0); goto out; }\n" n;
+ pr " py_%s = PyObject_CallMethod (py_%s_mod, \"c_int\", \"i\", *%s);\n" n n n;
pr " Py_DECREF (py_%s_mod);\n" n;
- pr " if (!py_%s) { PyErr_PrintEx (0); return -1; }\n" n;
+ pr " if (!py_%s) { PyErr_PrintEx (0); goto out; }\n" n;
| CBString _
| CBUInt _
| CBUInt64 _ -> ()
@@ -216,7 +231,7 @@ let print_python_closure_wrapper { cbname; cbargs } =
| CBArrayAndLen _ | CBMutable _ -> assert false
) cbargs;
pr ");\n";
- pr " Py_INCREF (py_args);\n";
+ pr " if (!py_args) { PyErr_PrintEx (0); goto out; }\n";
pr "\n";
pr " py_save = PyGILState_Ensure ();\n";
pr " py_ret = PyObject_CallObject (data->fn, py_args);\n";
@@ -238,19 +253,21 @@ let print_python_closure_wrapper { cbname; cbargs } =
pr " PyErr_Print ();\n";
pr " abort ();\n";
pr " }\n";
- pr " ret = -1;\n";
pr " PyErr_PrintEx (0); /* print exception */\n";
pr " };\n";
pr "\n";
+ pr " out:\n";
List.iter (
function
| CBArrayAndLen (UInt32 n, _) ->
- pr " Py_DECREF (py_%s);\n" n
+ pr " Py_XDECREF (py_%s);\n" n
| CBMutable (Int n) ->
- pr " PyObject *py_%s_ret = PyObject_GetAttrString (py_%s, \"value\");\n" n n;
- pr " *%s = PyLong_AsLong (py_%s_ret);\n" n n;
- pr " Py_DECREF (py_%s_ret);\n" n;
- pr " Py_DECREF (py_%s);\n" n
+ pr " if (py_%s) {\n" n;
+ pr " PyObject *py_%s_ret = PyObject_GetAttrString (py_%s, \"value\");\n" n n;
+ pr " *%s = PyLong_AsLong (py_%s_ret);\n" n n;
+ pr " Py_DECREF (py_%s_ret);\n" n;
+ pr " Py_DECREF (py_%s);\n" n;
+ pr " }\n"
| CBBytesIn _
| CBInt _ | CBInt64 _
| CBString _
--
2.33.1
2 years, 11 months
[PATCH libnbd] podwrapper.pl.in: Use short commit date
by Nir Soffer
We can use git short commit date format $cs. Maybe it was not available
when podwrapper.pl was create.
Signed-off-by: Nir Soffer <nsoffer(a)redhat.com>
---
podwrapper.pl.in | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/podwrapper.pl.in b/podwrapper.pl.in
index 9b39d7c..86ef452 100755
--- a/podwrapper.pl.in
+++ b/podwrapper.pl.in
@@ -233,8 +233,7 @@ my $date;
my $filename = "$abs_top_srcdir/.git";
if (!$date && -d $filename) {
local $ENV{GIT_DIR} = $filename;
- $_ = `git show -O/dev/null -s --format=%ci`;
- $date = $1 if /^(\d+-\d+-\d+)\s/;
+ $date = `git show -O/dev/null -s --format=%cs`;
}
if (!$date) {
my ($day, $month, $year) = (gmtime($ENV{SOURCE_DATE_EPOCH} || time))[3,4,5];
--
2.31.1
2 years, 11 months
[libnbd PATCH 0/2] Memory leak fixes
by Eric Blake
While working on 64-bit block status, I tried using nbdsh to run a
known-failing h.block_status() in a loop, and was surprised that
memory ran away, even though I remember having worked on plugging
python memory leaks a while back. So here's a couple more places that
need plugging.
Patch 1 is ready to go. Patch 2 helps, but is incomplete; I'm posting
it now because it's my bedtime.
Eric Blake (2):
api: Avoid memory leak on certain strict_mode failures
python: Fix memory leak on callback error
generator/Python.ml | 4 ++--
lib/rw.c | 4 ++--
tests/errors.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
3 files changed, 48 insertions(+), 5 deletions(-)
--
2.33.1
2 years, 11 months
[libnbd PATCH] golang: Simplify nbd_block_status callback array
by Eric Blake
Instead of copying from a C uint32_t[] to a golang []uint32, we can
exploit the fact that their underlying memory has the same
representation. An unsafe cast to more memory than necessary exposes
all the more that Go then needs to give a well-bounded slice, with no
copying necessary.
https://newbedev.com/pass-struct-and-array-of-structs-to-c-function-from-go
---
generator/GoLang.ml | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/generator/GoLang.ml b/generator/GoLang.ml
index eb3aa26..7455dde 100644
--- a/generator/GoLang.ml
+++ b/generator/GoLang.ml
@@ -1,6 +1,6 @@
(* hey emacs, this is OCaml code: -*- tuareg -*- *)
(* nbd client library in userspace: generator
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2021 Red Hat Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -513,13 +513,14 @@ import \"unsafe\"
/* Closures. */
-func copy_uint32_array (entries *C.uint32_t, count C.size_t) []uint32 {
- ret := make([]uint32, int (count))
- for i := 0; i < int (count); i++ {
- entry := (*C.uint32_t) (unsafe.Pointer(uintptr(unsafe.Pointer(entries)) + (unsafe.Sizeof(*entries) * uintptr(i))))
- ret[i] = uint32 (*entry)
- }
- return ret
+func use_uint32_array (entries *C.uint32_t, count C.size_t) []uint32 {
+ /* https://stackoverflow.com/questions/48756732/what-does-1-30c-yourtype-do-... */
+ unsafePtr := unsafe.Pointer(entries)
+ /* Max structured reply payload is 64M, so this array size is more than
+ * sufficient for the underlying slice we want to expose.
+ */
+ arrayPtr := (*[1 << 20]uint32)(unsafePtr)
+ return arrayPtr[:count:count]
}
";
@@ -601,7 +602,7 @@ func copy_uint32_array (entries *C.uint32_t, count C.size_t) []uint32 {
if !comma then pr ", "; comma := true;
match cbarg with
| CBArrayAndLen (UInt32 n, count) ->
- pr "copy_uint32_array (%s, %s)" n count
+ pr "use_uint32_array (%s, %s)" n count
| CBBytesIn (n, len) ->
pr "C.GoBytes (%s, C.int (%s))" n len
| CBInt n ->
--
2.33.1
2 years, 11 months
[PATCH v3 0/5] work around part table type misreporting by "parted"
by Laszlo Ersek
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1931821
v2: https://listman.redhat.com/archives/libguestfs/2021-November/msg00219.html
The series is fully ACK'd by Rich now, but please check the small
updates due to the v2 review, mainly in patch #4. (All Notes sections
have been updated.)
Retested.
Thanks!
Laszlo
Laszlo Ersek (5):
daemon/mkfs: disable creation of fake MBR partition table with
"mkfs.fat"
daemon/9p: fix wrong pathname in error message
daemon/parted: simplify print_partition_table() prototype
daemon/parted: work around part table type misreporting by "parted"
daemon/listfs: don't call "sgdisk -i" on bogus MBR partition table
entry
daemon/9p.c | 4 ++--
daemon/listfs.ml | 5 +++++
daemon/mkfs.c | 27 +++++++++++++++++++++++++++
daemon/parted.c | 17 ++++++-----------
daemon/parted.ml | 13 ++++++++-----
daemon/utils.ml | 45 +++++++++++++++++++++++++++++++++++++++++++++
daemon/utils.mli | 10 ++++++++++
7 files changed, 103 insertions(+), 18 deletions(-)
base-commit: e7f72ab146b9c2aaee92a600a1fcbefb0202d41c
--
2.19.1.3.g30247aa5d201
2 years, 12 months
[virt-v2v wave 2 PATCH v1 00/16] replace QXL (and Cirrus) with standard VGA
by Laszlo Ersek
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1961107
RFC: https://listman.redhat.com/archives/libguestfs/2021-November/msg00007.html
Please see the v1 changes (relative to the RFC posting) in the Notes
sections of the individual patches.
No actual guests have been converted for testing v1.
Cc: Fabian Deutsch <fdeutsch(a)redhat.com>
Cc: Gerd Hoffmann <kraxel(a)redhat.com>
Cc: Kashyap Chamarthy <kchamart(a)redhat.com>
Thanks,
Laszlo
Laszlo Ersek (16):
lib/types: introduce "Standard_VGA" constructor for
"guestcaps_video_type"
output: handle Standard_VGA in the libvirt XML and QEMU cmdline
formats
output: handle Standard_VGA in the OpenStack format
output: handle Standard_VGA in the JSON format
convert_linux: flip target display to Standard_VGA
convert/windows_virtio: flip target display to Standard_VGA
lib/create_ovf: fix "qxl_resourcetype" misnomer
lib/create_ovf: place a standard VGA video device in the OVF xml
lib/types: remove "QXL" constructor for "guestcaps_video_type"
tests: remove the fake Windows guest drivers for the QXL device
tests: remove the remaining QXL references (for completeness)
lib/types: remove "Cirrus" constructor for "guestcaps_video_type"
convert/windows_virtio: fix documentation of "install_drivers" return
type
lib/types: remove "guestcaps_video_type"
lib/types: replace "source_video" type with plain "string"
lib/types: remove the "source.s_video" field
convert/convert_linux.ml | 3 +--
convert/convert_windows.ml | 2 --
convert/windows_virtio.ml | 18 ++-------------
convert/windows_virtio.mli | 11 +++++-----
input/input.ml | 2 --
input/parse_domain_from_vmx.ml | 8 -------
input/parse_libvirt_xml.ml | 16 --------------
lib/create_ovf.ml | 18 +++++++++------
lib/types.ml | 23 --------------------
lib/types.mli | 18 ++++-----------
output/create_json.ml | 5 +----
output/create_libvirt_xml.ml | 4 +---
output/openstack_image_properties.ml | 5 +----
output/output.ml | 3 +--
test-data/fake-virtio-win/Makefile.am | 16 --------------
test-data/fake-virtio-win/drivers/amd64/Win2008R2/qxl.cat | 1 -
test-data/fake-virtio-win/drivers/amd64/Win2008R2/qxl.inf | 2 --
test-data/fake-virtio-win/drivers/amd64/Win2008R2/qxl.sys | 1 -
test-data/fake-virtio-win/drivers/amd64/Win2008R2/qxldd.dll | 1 -
test-data/fake-virtio-win/drivers/amd64/Win7/qxl.cat | 1 -
test-data/fake-virtio-win/drivers/amd64/Win7/qxl.inf | 2 --
test-data/fake-virtio-win/drivers/amd64/Win7/qxl.sys | 1 -
test-data/fake-virtio-win/drivers/amd64/Win7/qxldd.dll | 1 -
test-data/fake-virtio-win/drivers/i386/Win7/qxl.cat | 1 -
test-data/fake-virtio-win/drivers/i386/Win7/qxl.inf | 2 --
test-data/fake-virtio-win/drivers/i386/Win7/qxl.sys | 1 -
test-data/fake-virtio-win/drivers/i386/Win7/qxldd.dll | 1 -
test-data/fake-virtio-win/drivers/i386/WinXP/qxl.cat | 1 -
test-data/fake-virtio-win/drivers/i386/WinXP/qxl.inf | 2 --
test-data/fake-virtio-win/drivers/i386/WinXP/qxl.sys | 1 -
test-data/fake-virtio-win/drivers/i386/WinXP/qxldd.dll | 1 -
test-data/phony-guests/guests.xml.in | 2 +-
tests/test-v2v-i-ova-formats.expected | 1 -
tests/test-v2v-i-ova-gz.expected | 1 -
tests/test-v2v-i-ova-snapshots.expected | 1 -
tests/test-v2v-i-ova-snapshots.expected2 | 1 -
tests/test-v2v-i-ova-subfolders.expected | 1 -
tests/test-v2v-i-ova-subfolders.expected2 | 1 -
tests/test-v2v-i-ova-tar.expected | 1 -
tests/test-v2v-i-ova-tar.expected2 | 1 -
tests/test-v2v-i-ova-two-disks.expected | 1 -
tests/test-v2v-i-ova-two-disks.expected2 | 1 -
tests/test-v2v-i-ova.xml | 2 +-
tests/test-v2v-i-vmx-1.expected | 1 -
tests/test-v2v-i-vmx-2.expected | 1 -
tests/test-v2v-i-vmx-3.expected | 1 -
tests/test-v2v-i-vmx-4.expected | 1 -
tests/test-v2v-i-vmx-5.expected | 1 -
tests/test-v2v-in-place.sh | 2 +-
tests/test-v2v-o-rhv.ovf.expected | 2 +-
tests/test-v2v-o-vdsm-options.ovf.expected | 2 +-
tests/test-v2v-print-source.expected | 1 -
tests/test-v2v-print-source.xml.in | 2 +-
tests/test-v2v-windows-conversion.sh | 2 +-
v2v/v2v_unit_tests.ml | 16 --------------
55 files changed, 34 insertions(+), 184 deletions(-)
delete mode 100644 test-data/fake-virtio-win/drivers/amd64/Win2008R2/qxl.cat
delete mode 100644 test-data/fake-virtio-win/drivers/amd64/Win2008R2/qxl.inf
delete mode 100644 test-data/fake-virtio-win/drivers/amd64/Win2008R2/qxl.sys
delete mode 100644 test-data/fake-virtio-win/drivers/amd64/Win2008R2/qxldd.dll
delete mode 100644 test-data/fake-virtio-win/drivers/amd64/Win7/qxl.cat
delete mode 100644 test-data/fake-virtio-win/drivers/amd64/Win7/qxl.inf
delete mode 100644 test-data/fake-virtio-win/drivers/amd64/Win7/qxl.sys
delete mode 100644 test-data/fake-virtio-win/drivers/amd64/Win7/qxldd.dll
delete mode 100644 test-data/fake-virtio-win/drivers/i386/Win7/qxl.cat
delete mode 100644 test-data/fake-virtio-win/drivers/i386/Win7/qxl.inf
delete mode 100644 test-data/fake-virtio-win/drivers/i386/Win7/qxl.sys
delete mode 100644 test-data/fake-virtio-win/drivers/i386/Win7/qxldd.dll
delete mode 100644 test-data/fake-virtio-win/drivers/i386/WinXP/qxl.cat
delete mode 100644 test-data/fake-virtio-win/drivers/i386/WinXP/qxl.inf
delete mode 100644 test-data/fake-virtio-win/drivers/i386/WinXP/qxl.sys
delete mode 100644 test-data/fake-virtio-win/drivers/i386/WinXP/qxldd.dll
base-commit: ab55f9432e774d83abe431cdf72b6b8e194fe9ec
--
2.19.1.3.g30247aa5d201
2 years, 12 months