代码拉取完成,页面将自动刷新
同步操作将从 yangshicheng/systemd 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
From 57ba83ddd33d8ed5e8cee6a35f6ee780532a7a0d Mon Sep 17 00:00:00 2001
From: Daan De Meyer <daan.j.demeyer@gmail.com>
Date: Tue, 25 Jan 2022 11:50:40 +0000
Subject: [PATCH] journal: Only move to objects when necessary
Conflict:don't modify journal_file_read_object because 117e2112 isn't merged;
don't modify generic_array_get because 8d801e35cb isn't merged; adapt context
Reference:https://github.com/systemd/systemd/commit/ded10e3a5f4c9a9fca9a57f5feb7e77db4155dbd
Let's make sure we only move to objects when it's required. If "ret"
is NULL, the caller isn't interested in the actual object and the
function being called shouldn't move to it unless it has to
inspect/modify the object itself.
---
src/libsystemd/sd-journal/journal-file.c | 99 +++++++++--------------
1 file changed, 39 insertions(+), 60 deletions(-)
diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c
index e3e926b..efc5018 100644
--- a/src/libsystemd/sd-journal/journal-file.c
+++ b/src/libsystemd/sd-journal/journal-file.c
@@ -931,7 +931,6 @@ int journal_file_move_to_object(JournalFile *f, ObjectType type, uint64_t offset
uint64_t s;
assert(f);
- assert(ret);
/* Objects may only be located at multiple of 64 bit */
if (!VALID64(offset))
@@ -986,7 +985,9 @@ int journal_file_move_to_object(JournalFile *f, ObjectType type, uint64_t offset
if (r < 0)
return r;
- *ret = o;
+ if (ret)
+ *ret = o;
+
return 0;
}
@@ -1584,19 +1585,11 @@ static int journal_file_append_field(
hash = journal_file_hash_data(f, field, size);
- r = journal_file_find_field_object_with_hash(f, field, size, hash, &o, &p);
+ r = journal_file_find_field_object_with_hash(f, field, size, hash, ret, ret_offset);
if (r < 0)
return r;
- if (r > 0) {
-
- if (ret)
- *ret = o;
-
- if (ret_offset)
- *ret_offset = p;
-
+ if (r > 0)
return 0;
- }
osize = offsetof(Object, field.payload) + size;
r = journal_file_append_object(f, OBJECT_FIELD, osize, &o, &p);
@@ -1610,20 +1603,20 @@ static int journal_file_append_field(
if (r < 0)
return r;
- /* The linking might have altered the window, so let's
- * refresh our pointer */
- r = journal_file_move_to_object(f, OBJECT_FIELD, p, &o);
- if (r < 0)
- return r;
+ /* The linking might have altered the window, so let's only pass the offset to hmac which will
+ * move to the object again if needed. */
#if HAVE_GCRYPT
- r = journal_file_hmac_put_object(f, OBJECT_FIELD, o, p);
+ r = journal_file_hmac_put_object(f, OBJECT_FIELD, NULL, p);
if (r < 0)
return r;
#endif
- if (ret)
- *ret = o;
+ if (ret) {
+ r = journal_file_move_to_object(f, OBJECT_FIELD, p, ret);
+ if (r < 0)
+ return r;
+ }
if (ret_offset)
*ret_offset = p;
@@ -1647,19 +1640,11 @@ static int journal_file_append_data(
hash = journal_file_hash_data(f, data, size);
- r = journal_file_find_data_object_with_hash(f, data, size, hash, &o, &p);
+ r = journal_file_find_data_object_with_hash(f, data, size, hash, ret, ret_offset);
if (r < 0)
return r;
- if (r > 0) {
-
- if (ret)
- *ret = o;
-
- if (ret_offset)
- *ret_offset = p;
-
+ if (r > 0)
return 0;
- }
osize = offsetof(Object, data.payload) + size;
r = journal_file_append_object(f, OBJECT_DATA, osize, &o, &p);
@@ -1693,17 +1678,16 @@ static int journal_file_append_data(
if (r < 0)
return r;
-#if HAVE_GCRYPT
- r = journal_file_hmac_put_object(f, OBJECT_DATA, o, p);
+ /* The linking might have altered the window, so let's refresh our pointer. */
+ r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
if (r < 0)
return r;
-#endif
- /* The linking might have altered the window, so let's
- * refresh our pointer */
- r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
+#if HAVE_GCRYPT
+ r = journal_file_hmac_put_object(f, OBJECT_DATA, o, p);
if (r < 0)
return r;
+#endif
if (!data)
eq = NULL;
@@ -2307,20 +2290,15 @@ static int generic_array_get_plus_one(
uint64_t i,
Object **ret, uint64_t *ret_offset) {
- Object *o;
-
assert(f);
if (i == 0) {
int r;
- r = journal_file_move_to_object(f, OBJECT_ENTRY, extra, &o);
+ r = journal_file_move_to_object(f, OBJECT_ENTRY, extra, ret);
if (r < 0)
return r;
- if (ret)
- *ret = o;
-
if (ret_offset)
*ret_offset = extra;
@@ -2349,7 +2327,7 @@ static int generic_array_bisect(
uint64_t a, p, t = 0, i = 0, last_p = 0, last_index = UINT64_MAX;
bool subtract_one = false;
- Object *o, *array = NULL;
+ Object *array = NULL;
int r;
ChainCacheItem *ci;
@@ -2537,12 +2515,11 @@ found:
else
p = le64toh(array->entry_array.items[i]);
- r = journal_file_move_to_object(f, OBJECT_ENTRY, p, &o);
- if (r < 0)
- return r;
-
- if (ret)
- *ret = o;
+ if (ret) {
+ r = journal_file_move_to_object(f, OBJECT_ENTRY, p, ret);
+ if (r < 0)
+ return r;
+ }
if (ret_offset)
*ret_offset = p;
@@ -2567,7 +2544,6 @@ static int generic_array_bisect_plus_one(
int r;
bool step_back = false;
- Object *o;
assert(f);
assert(test_object);
@@ -2610,12 +2586,11 @@ static int generic_array_bisect_plus_one(
return r;
found:
- r = journal_file_move_to_object(f, OBJECT_ENTRY, extra, &o);
- if (r < 0)
- return r;
-
- if (ret)
- *ret = o;
+ if (ret) {
+ r = journal_file_move_to_object(f, OBJECT_ENTRY, extra, ret);
+ if (r < 0)
+ return r;
+ }
if (ret_offset)
*ret_offset = extra;
@@ -3088,7 +3063,6 @@ int journal_file_move_to_entry_by_monotonic_for_data(
* exists in both bisection arrays */
for (;;) {
- Object *qo;
uint64_t p, q;
r = journal_file_move_to_object(f, OBJECT_DATA, data_offset, &d);
@@ -3117,14 +3091,18 @@ int journal_file_move_to_entry_by_monotonic_for_data(
p,
test_object_offset,
direction,
- &qo, &q, NULL);
+ NULL, &q, NULL);
if (r <= 0)
return r;
if (p == q) {
- if (ret)
- *ret = qo;
+ if (ret) {
+ r = journal_file_move_to_object(f, OBJECT_ENTRY, q, ret);
+ if (r < 0)
+ return r;
+ }
+
if (ret_offset)
*ret_offset = q;
--
2.23.0
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。