[libguestfs] Upstream patch to fix performance regression in virt-builder (RHBZ#1188866).
Richard W.M. Jones
rjones at fedoraproject.org
Wed Feb 4 19:08:06 UTC 2015
commit b865a8529b8748a8571ea847750f3e2c0a5d491b
Author: Richard W.M. Jones <rjones at redhat.com>
Date: Wed Feb 4 18:58:20 2015 +0000
Upstream patch to fix performance regression in virt-builder (RHBZ#1188866).
- Change the way Python double-build is done so we only have to
apply patches in one place.
...-large-performance-regression-in-pxzcat-R.patch | 63 ++++++++++++++++++++
libguestfs.spec | 21 +++++-
2 files changed, 80 insertions(+), 4 deletions(-)
---
diff --git a/0001-builder-Fix-large-performance-regression-in-pxzcat-R.patch b/0001-builder-Fix-large-performance-regression-in-pxzcat-R.patch
new file mode 100644
index 0000000..18e436f
--- /dev/null
+++ b/0001-builder-Fix-large-performance-regression-in-pxzcat-R.patch
@@ -0,0 +1,63 @@
+From ff1cf989fd49cfb82db428e66034c7b2d6bebe8a Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones at redhat.com>
+Date: Wed, 4 Feb 2015 13:17:40 +0000
+Subject: [PATCH] builder: Fix large performance regression in pxzcat
+ (RHBZ#1188866).
+
+Commit 9135129b0f6e8eb171131ea0f7d729a960b74cb3 changed
+two stack buffers to pointers:
+
+- uint8_t buf[BUFFER_SIZE];
+- unsigned char outbuf[BUFFER_SIZE];
++ CLEANUP_FREE uint8_t *buf = NULL;
++ CLEANUP_FREE uint8_t *outbuf = NULL;
+
+but we were still using sizeof buf to calculate the size of the
+buffer. sizeof buf == 8 so the original code which used large buffers
+for reading/writing the file changed to using 8 byte buffers.
+---
+ builder/pxzcat-c.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/builder/pxzcat-c.c b/builder/pxzcat-c.c
+index bd4c0a8..0bbd296 100644
+--- a/builder/pxzcat-c.c
++++ b/builder/pxzcat-c.c
+@@ -640,14 +640,14 @@ worker_thread (void *vp)
+ strm.next_in = NULL;
+ strm.avail_in = 0;
+ strm.next_out = outbuf;
+- strm.avail_out = sizeof outbuf;
++ strm.avail_out = BUFFER_SIZE;
+
+ for (;;) {
+ lzma_action action = LZMA_RUN;
+
+ if (strm.avail_in == 0) {
+ strm.next_in = buf;
+- n = pread (global->fd, buf, sizeof buf, position);
++ n = pread (global->fd, buf, BUFFER_SIZE, position);
+ if (n == -1) {
+ perror (global->filename);
+ return &state->status;
+@@ -661,7 +661,7 @@ worker_thread (void *vp)
+ r = lzma_code (&strm, action);
+
+ if (strm.avail_out == 0 || r == LZMA_STREAM_END) {
+- size_t wsz = sizeof outbuf - strm.avail_out;
++ size_t wsz = BUFFER_SIZE - strm.avail_out;
+
+ /* Don't write if the block is all zero, to preserve output file
+ * sparseness. However we have to update oposition.
+@@ -675,7 +675,7 @@ worker_thread (void *vp)
+ oposition += wsz;
+
+ strm.next_out = outbuf;
+- strm.avail_out = sizeof outbuf;
++ strm.avail_out = BUFFER_SIZE;
+ }
+
+ if (r == LZMA_STREAM_END)
+--
+2.1.0
+
diff --git a/libguestfs.spec b/libguestfs.spec
index d101104..076e931 100644
--- a/libguestfs.spec
+++ b/libguestfs.spec
@@ -25,13 +25,16 @@ Summary: Access and modify virtual machine disk images
Name: libguestfs
Epoch: 1
Version: 1.29.24
-Release: 1%{?dist}
+Release: 2%{?dist}
License: LGPLv2+
# Source and patches.
URL: http://libguestfs.org/
Source0: http://libguestfs.org/download/1.29-development/%{name}-%{version}.tar.gz
+# Upstream patch to fix performance regression in virt-builder (RHBZ#1188866).
+Patch0001: 0001-builder-Fix-large-performance-regression-in-pxzcat-R.patch
+
# Basic build requirements:
BuildRequires: perl(Pod::Simple)
BuildRequires: perl(Pod::Man)
@@ -746,13 +749,18 @@ for %{name}.
%prep
+%setup -q
+
+%patch0001 -p1
+
# For Python 3 we must build libguestfs twice. This creates:
# %{name}-%{version}/
# %{name}-%{version}/python3/
# with a second copy of the sources in the python3 subdir.
-%setup -q
-%setup -q -T -D -a 0
-mv %{name}-%{version} python3
+pushd ..
+cp -a %{name}-%{version} tmp-python3
+mv tmp-python3 %{name}-%{version}/python3
+popd
if [ "$(getenforce | tr '[A-Z]' '[a-z]')" != "disabled" ]; then
# For sVirt to work, the local temporary directory we use in the
@@ -1283,6 +1291,11 @@ popd
%changelog
+* Wed Feb 04 2015 Richard W.M. Jones <rjones at redhat.com> - 1:1.29.24-2
+- Upstream patch to fix performance regression in virt-builder (RHBZ#1188866).
+- Change the way Python double-build is done so we only have to
+ apply patches in one place.
+
* Tue Feb 03 2015 Richard W.M. Jones <rjones at redhat.com> - 1:1.29.24-1
- New upstream version 1.29.24.
- Add Python 3 bindings.
More information about the scm-commits
mailing list