Blame SOURCES/0294-journal-fix-error-handling-when-compressing-journal-.patch

17b0f1
From f45b66a348f5778bd391ad1b0a0e09bf5789b415 Mon Sep 17 00:00:00 2001
17b0f1
From: Lennart Poettering <lennart@poettering.net>
17b0f1
Date: Sat, 24 Oct 2015 13:17:54 +0200
17b0f1
Subject: [PATCH] journal: fix error handling when compressing journal objects
17b0f1
17b0f1
Let's make sure we handle compression errors properly, and don't
17b0f1
misunderstand an error for success.
17b0f1
17b0f1
Also, let's actually compress things if lz4 is enabled.
17b0f1
17b0f1
Fixes #1662.
17b0f1
17b0f1
Cherry-picked from: d1afbcd22170e95c79261340071d376fe41fc3af
17b0f1
Resolves: #1292447
17b0f1
---
17b0f1
 src/journal/journal-file.c | 12 +++++++-----
17b0f1
 src/journal/journal-file.h |  5 +++++
17b0f1
 2 files changed, 12 insertions(+), 5 deletions(-)
17b0f1
17b0f1
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
17b0f1
index f500568fec..a8f92e23a9 100644
17b0f1
--- a/src/journal/journal-file.c
17b0f1
+++ b/src/journal/journal-file.c
17b0f1
@@ -1051,23 +1051,25 @@ static int journal_file_append_data(
17b0f1
         o->data.hash = htole64(hash);
17b0f1
 
17b0f1
 #if defined(HAVE_XZ) || defined(HAVE_LZ4)
17b0f1
-        if (f->compress_xz &&
17b0f1
-            size >= COMPRESSION_SIZE_THRESHOLD) {
17b0f1
+        if (JOURNAL_FILE_COMPRESS(f) && size >= COMPRESSION_SIZE_THRESHOLD) {
17b0f1
                 size_t rsize;
17b0f1
 
17b0f1
                 compression = compress_blob(data, size, o->data.payload, &rsize);
17b0f1
 
17b0f1
-                if (compression) {
17b0f1
+                if (compression >= 0) {
17b0f1
                         o->object.size = htole64(offsetof(Object, data.payload) + rsize);
17b0f1
                         o->object.flags |= compression;
17b0f1
 
17b0f1
                         log_debug("Compressed data object %"PRIu64" -> %zu using %s",
17b0f1
                                   size, rsize, object_compressed_to_string(compression));
17b0f1
-                }
17b0f1
+                } else
17b0f1
+                        /* Compression didn't work, we don't really care why, let's continue without compression */
17b0f1
+                        compression = 0;
17b0f1
+
17b0f1
         }
17b0f1
 #endif
17b0f1
 
17b0f1
-        if (!compression && size > 0)
17b0f1
+        if (compression == 0 && size > 0)
17b0f1
                 memcpy(o->data.payload, data, size);
17b0f1
 
17b0f1
         r = journal_file_link_data(f, o, p, hash);
17b0f1
diff --git a/src/journal/journal-file.h b/src/journal/journal-file.h
17b0f1
index 403c8f760c..0f29b092b7 100644
17b0f1
--- a/src/journal/journal-file.h
17b0f1
+++ b/src/journal/journal-file.h
17b0f1
@@ -229,3 +229,8 @@ int journal_file_get_cutoff_realtime_usec(JournalFile *f, usec_t *from, usec_t *
17b0f1
 int journal_file_get_cutoff_monotonic_usec(JournalFile *f, sd_id128_t boot, usec_t *from, usec_t *to);
17b0f1
 
17b0f1
 bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec);
17b0f1
+
17b0f1
+static inline bool JOURNAL_FILE_COMPRESS(JournalFile *f) {
17b0f1
+        assert(f);
17b0f1
+        return f->compress_xz || f->compress_lz4;
17b0f1
+}