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