Projects
Mega:23.03
systemd
_service:tar_scm:backport-journal-Deduplicate-e...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:backport-journal-Deduplicate-entry-items-before-they-are-stor.patch of Package systemd
From 71976e91c5a887585b9fb8a162116824b141eecf Mon Sep 17 00:00:00 2001 From: Daan De Meyer <daan.j.demeyer@gmail.com> Date: Fri, 12 Nov 2021 14:32:40 +0000 Subject: [PATCH] journal: Deduplicate entry items before they are stored in the entry object If the iovec contains the same data more than once, we'll end up with duplicate offsets in the items array. Let's make sure we remove any duplicates before we store the items in an entry object. (cherry picked from commit 5ec9fbae64bef896368f744a875dd0437a4c42f2) Conflict:NA Reference:https://github.com/systemd/systemd/commit/71976e91c5a887585b9fb8a162116824b141eecf --- src/libsystemd/sd-journal/journal-file.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c index ae19c1c1f2..a8029c2868 100644 --- a/src/libsystemd/sd-journal/journal-file.c +++ b/src/libsystemd/sd-journal/journal-file.c @@ -2082,6 +2082,21 @@ static int entry_item_cmp(const EntryItem *a, const EntryItem *b) { return CMP(le64toh(a->object_offset), le64toh(b->object_offset)); } +static size_t remove_duplicate_entry_items(EntryItem items[], size_t n) { + + /* This function relies on the items array being sorted. */ + size_t j = 1; + + if (n <= 1) + return n; + + for (size_t i = 1; i < n; i++) + if (items[i].object_offset != items[j - 1].object_offset) + items[j++] = items[i]; + + return j; +} + int journal_file_append_entry( JournalFile *f, const dual_timestamp *ts, @@ -2151,6 +2166,7 @@ int journal_file_append_entry( /* Order by the position on disk, in order to improve seek * times for rotating media. */ typesafe_qsort(items, n_iovec, entry_item_cmp); + n_iovec = remove_duplicate_entry_items(items, n_iovec); r = journal_file_append_entry_internal(f, ts, boot_id, xor_hash, items, n_iovec, seqnum, ret, ret_offset); -- 2.33.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2