diff options
author | Lennart Poettering <lennart@poettering.net> | 2015-10-24 13:17:54 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2015-10-24 13:19:42 +0200 |
commit | d1afbcd22170e95c79261340071d376fe41fc3af (patch) | |
tree | f212080a9afbc69adb867bdca1f3e91cbdae3c38 /src/journal/journal-file.c | |
parent | 931c7feac07aa0f8c1be02b4f746a568c9cae883 (diff) |
journal: fix error handling when compressing journal objects
Let's make sure we handle compression errors properly, and don't
misunderstand an error for success.
Also, let's actually compress things if lz4 is enabled.
Fixes #1662.
Diffstat (limited to 'src/journal/journal-file.c')
-rw-r--r-- | src/journal/journal-file.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c index 1071c6d6d7..89068f26d2 100644 --- a/src/journal/journal-file.c +++ b/src/journal/journal-file.c @@ -1076,23 +1076,24 @@ static int journal_file_append_data( o->data.hash = htole64(hash); #if defined(HAVE_XZ) || defined(HAVE_LZ4) - if (f->compress_xz && - size >= COMPRESSION_SIZE_THRESHOLD) { + if (JOURNAL_FILE_COMPRESS(f) && size >= COMPRESSION_SIZE_THRESHOLD) { size_t rsize = 0; compression = compress_blob(data, size, o->data.payload, &rsize); - if (compression) { + if (compression >= 0) { o->object.size = htole64(offsetof(Object, data.payload) + rsize); o->object.flags |= compression; log_debug("Compressed data object %"PRIu64" -> %zu using %s", size, rsize, object_compressed_to_string(compression)); - } + } else + /* Compression didn't work, we don't really care why, let's continue without compression */ + compression = 0; } #endif - if (!compression && size > 0) + if (compression == 0 && size > 0) memcpy(o->data.payload, data, size); r = journal_file_link_data(f, o, p, hash); |