You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
4.2 KiB
120 lines
4.2 KiB
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
|
|
|