|
|
|
From bae0c1d66cba62b19d39a3a79cb76fbd5d4ef7e7 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Jan Rybar <jrybar@redhat.com>
|
|
|
|
Date: Thu, 17 Aug 2017 14:38:11 +0200
|
|
|
|
Subject: [PATCH] Add support to read lz4 compressed journals
|
|
|
|
|
|
|
|
Functionality already in codebase, but deactivated in RHEL
|
|
|
|
Changed calling of LZ4 functions due to deprecation of the originals.
|
|
|
|
Fixed typecasting of max_bytes to size_t in debuglog()
|
|
|
|
|
|
|
|
Resolves: rhbz#1431687
|
|
|
|
|
|
|
|
changes to .spec file:
|
|
|
|
|
|
|
|
@@ -552,6 +553,7 @@ BuildRequires: libblkid-devel
|
|
|
|
BuildRequires: xz-devel
|
|
|
|
BuildRequires: zlib-devel
|
|
|
|
BuildRequires: bzip2-devel
|
|
|
|
+BuildRequires: lz4-devel
|
|
|
|
BuildRequires: libidn-devel
|
|
|
|
BuildRequires: libcurl-devel
|
|
|
|
BuildRequires: kmod-devel
|
|
|
|
@@ -742,6 +744,7 @@ CONFIGURE_OPTS=(
|
|
|
|
--enable-compat-libs
|
|
|
|
--disable-sysusers
|
|
|
|
--disable-ldconfig
|
|
|
|
+ --enable-lz4
|
|
|
|
%ifarch s390 s390x ppc %{power64} aarch64
|
|
|
|
--disable-lto
|
|
|
|
%endif
|
|
|
|
---
|
|
|
|
src/journal/compress.c | 11 ++++++++---
|
|
|
|
src/journal/compress.h | 11 -----------
|
|
|
|
src/journal/journal-file.c | 5 ++---
|
|
|
|
3 files changed, 10 insertions(+), 17 deletions(-)
|
|
|
|
|
|
|
|
diff --git a/src/journal/compress.c b/src/journal/compress.c
|
|
|
|
index 4fb09f5965..3baf9e4ad7 100644
|
|
|
|
--- a/src/journal/compress.c
|
|
|
|
+++ b/src/journal/compress.c
|
|
|
|
@@ -98,7 +98,12 @@ int compress_blob_lz4(const void *src, uint64_t src_size, void *dst, size_t *dst
|
|
|
|
if (src_size < 9)
|
|
|
|
return -ENOBUFS;
|
|
|
|
|
|
|
|
- r = LZ4_compress_limitedOutput(src, dst + 8, src_size, src_size - 8 - 1);
|
|
|
|
+#if LZ4_VERSION_NUMBER >= 10700
|
|
|
|
+ r = LZ4_compress_default(src, (char*)dst + 8, src_size, src_size - 8 - 1);
|
|
|
|
+#else
|
|
|
|
+ r = LZ4_compress_limitedOutput(src, (char*)dst + 8, src_size, src_size - 8 - 1);
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
if (r <= 0)
|
|
|
|
return -ENOBUFS;
|
|
|
|
|
|
|
|
@@ -458,7 +463,7 @@ int compress_stream_lz4(int fdf, int fdt, off_t max_bytes) {
|
|
|
|
|
|
|
|
total_in += n;
|
|
|
|
|
|
|
|
- r = LZ4_compress_continue(&lz4_data, buf, out, n);
|
|
|
|
+ r = LZ4_compress_fast_continue(&lz4_data, buf, out, n, LZ4_COMPRESSBOUND(LZ4_BUFSIZE), 0);
|
|
|
|
if (r == 0) {
|
|
|
|
log_error("LZ4 compression failed.");
|
|
|
|
return -EBADMSG;
|
|
|
|
@@ -634,7 +639,7 @@ int decompress_stream_lz4(int fdf, int fdt, off_t max_bytes) {
|
|
|
|
total_out += r;
|
|
|
|
|
|
|
|
if (max_bytes != -1 && total_out > (size_t) max_bytes) {
|
|
|
|
- log_debug("Decompressed stream longer than %zd bytes", max_bytes);
|
|
|
|
+ log_debug("Decompressed stream longer than %zd bytes", (size_t) max_bytes);
|
|
|
|
return -EFBIG;
|
|
|
|
}
|
|
|
|
|
|
|
|
diff --git a/src/journal/compress.h b/src/journal/compress.h
|
|
|
|
index 136dda6d39..0f62a58d6e 100644
|
|
|
|
--- a/src/journal/compress.h
|
|
|
|
+++ b/src/journal/compress.h
|
|
|
|
@@ -35,15 +35,9 @@ int compress_blob_lz4(const void *src, uint64_t src_size, void *dst, size_t *dst
|
|
|
|
|
|
|
|
static inline int compress_blob(const void *src, uint64_t src_size, void *dst, size_t *dst_size) {
|
|
|
|
int r;
|
|
|
|
-#ifdef HAVE_LZ4
|
|
|
|
- r = compress_blob_lz4(src, src_size, dst, dst_size);
|
|
|
|
- if (r == 0)
|
|
|
|
- return OBJECT_COMPRESSED_LZ4;
|
|
|
|
-#else
|
|
|
|
r = compress_blob_xz(src, src_size, dst, dst_size);
|
|
|
|
if (r == 0)
|
|
|
|
return OBJECT_COMPRESSED_XZ;
|
|
|
|
-#endif
|
|
|
|
return r;
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -75,12 +69,7 @@ int compress_stream_lz4(int fdf, int fdt, off_t max_bytes);
|
|
|
|
int decompress_stream_xz(int fdf, int fdt, off_t max_size);
|
|
|
|
int decompress_stream_lz4(int fdf, int fdt, off_t max_size);
|
|
|
|
|
|
|
|
-#ifdef HAVE_LZ4
|
|
|
|
-# define compress_stream compress_stream_lz4
|
|
|
|
-# define COMPRESSED_EXT ".lz4"
|
|
|
|
-#else
|
|
|
|
# define compress_stream compress_stream_xz
|
|
|
|
# define COMPRESSED_EXT ".xz"
|
|
|
|
-#endif
|
|
|
|
|
|
|
|
int decompress_stream(const char *filename, int fdf, int fdt, off_t max_bytes);
|
|
|
|
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
|
|
|
|
index 0fd59ec073..ebc8e62305 100644
|
|
|
|
--- a/src/journal/journal-file.c
|
|
|
|
+++ b/src/journal/journal-file.c
|
|
|
|
@@ -2615,9 +2615,8 @@ int journal_file_open(
|
|
|
|
f->flags = flags;
|
|
|
|
f->prot = prot_from_flags(flags);
|
|
|
|
f->writable = (flags & O_ACCMODE) != O_RDONLY;
|
|
|
|
-#if defined(HAVE_LZ4)
|
|
|
|
- f->compress_lz4 = compress;
|
|
|
|
-#elif defined(HAVE_XZ)
|
|
|
|
+
|
|
|
|
+#if defined(HAVE_XZ)
|
|
|
|
f->compress_xz = compress;
|
|
|
|
#endif
|
|
|
|
#ifdef HAVE_GCRYPT
|