chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
socket: add option for SO_PASSEC
[elogind.git]
/
src
/
journal
/
journal-file.c
diff --git
a/src/journal/journal-file.c
b/src/journal/journal-file.c
index 6ba3d8dca37797cd159835edb4a542f8de87c2d2..8c17620ed339bf9576bf498e2d6ad02018983df8 100644
(file)
--- a/
src/journal/journal-file.c
+++ b/
src/journal/journal-file.c
@@
-37,7
+37,7
@@
#define DEFAULT_WINDOW_SIZE (128ULL*1024ULL*1024ULL)
#define DEFAULT_WINDOW_SIZE (128ULL*1024ULL*1024ULL)
-#define COMPRESSION_SIZE_THRESHOLD (
64
ULL)
+#define COMPRESSION_SIZE_THRESHOLD (
512
ULL)
/* This is the minimum journal file size */
#define JOURNAL_FILE_SIZE_MIN (64ULL*1024ULL)
/* This is the minimum journal file size */
#define JOURNAL_FILE_SIZE_MIN (64ULL*1024ULL)
@@
-238,7
+238,7
@@
static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size)
if (fstat(f->fd, &f->last_stat) < 0)
return -errno;
if (fstat(f->fd, &f->last_stat) < 0)
return -errno;
- f->header->arena_size =
new_size - htole64(f->header->arena_offset
);
+ f->header->arena_size =
htole64(new_size - le64toh(f->header->arena_offset)
);
return 0;
}
return 0;
}
@@
-581,6
+581,8
@@
static int journal_file_link_data(JournalFile *f, Object *o, uint64_t offset, ui
assert(offset > 0);
assert(o->object.type == OBJECT_DATA);
assert(offset > 0);
assert(o->object.type == OBJECT_DATA);
+ /* This might alter the window we are looking at */
+
o->data.next_hash_offset = o->data.next_field_offset = 0;
o->data.entry_offset = o->data.entry_array_offset = 0;
o->data.n_entries = 0;
o->data.next_hash_offset = o->data.next_field_offset = 0;
o->data.entry_offset = o->data.entry_array_offset = 0;
o->data.n_entries = 0;
@@
-591,18
+593,14
@@
static int journal_file_link_data(JournalFile *f, Object *o, uint64_t offset, ui
/* Only entry in the hash table is easy */
f->data_hash_table[h].head_hash_offset = htole64(offset);
} else {
/* Only entry in the hash table is easy */
f->data_hash_table[h].head_hash_offset = htole64(offset);
} else {
- /*
Temporarily move back to the previous data object,
- *
to patch in
pointer */
+ /*
Move back to the previous data object, to patch in
+ * pointer */
r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
if (r < 0)
return r;
o->data.next_hash_offset = htole64(offset);
r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
if (r < 0)
return r;
o->data.next_hash_offset = htole64(offset);
-
- r = journal_file_move_to_object(f, OBJECT_DATA, offset, &o);
- if (r < 0)
- return r;
}
f->data_hash_table[h].tail_hash_offset = htole64(offset);
}
f->data_hash_table[h].tail_hash_offset = htole64(offset);
@@
-614,6
+612,7
@@
int journal_file_find_data_object_with_hash(
JournalFile *f,
const void *data, uint64_t size, uint64_t hash,
Object **ret, uint64_t *offset) {
JournalFile *f,
const void *data, uint64_t size, uint64_t hash,
Object **ret, uint64_t *offset) {
+
uint64_t p, osize, h;
int r;
uint64_t p, osize, h;
int r;
@@
-640,8
+639,7
@@
int journal_file_find_data_object_with_hash(
if (o->object.flags & OBJECT_COMPRESSED) {
#ifdef HAVE_XZ
if (o->object.flags & OBJECT_COMPRESSED) {
#ifdef HAVE_XZ
- uint64_t l;
- size_t rsize;
+ uint64_t l, rsize;
l = le64toh(o->object.size);
if (l <= offsetof(Object, data.payload))
l = le64toh(o->object.size);
if (l <= offsetof(Object, data.payload))
@@
-652,7
+650,7
@@
int journal_file_find_data_object_with_hash(
if (!uncompress_blob(o->data.payload, l, &f->compress_buffer, &f->compress_buffer_size, &rsize))
return -EBADMSG;
if (!uncompress_blob(o->data.payload, l, &f->compress_buffer, &f->compress_buffer_size, &rsize))
return -EBADMSG;
- if (
(uint64_t)
rsize == size &&
+ if (rsize == size &&
memcmp(f->compress_buffer, data, size) == 0) {
if (ret)
memcmp(f->compress_buffer, data, size) == 0) {
if (ret)
@@
-703,7
+701,11
@@
int journal_file_find_data_object(
ret, offset);
}
ret, offset);
}
-static int journal_file_append_data(JournalFile *f, const void *data, uint64_t size, Object **ret, uint64_t *offset) {
+static int journal_file_append_data(
+ JournalFile *f,
+ const void *data, uint64_t size,
+ Object **ret, uint64_t *offset) {
+
uint64_t hash, p;
uint64_t osize;
Object *o;
uint64_t hash, p;
uint64_t osize;
Object *o;
@@
-761,6
+763,12
@@
static int journal_file_append_data(JournalFile *f, const void *data, uint64_t s
if (r < 0)
return r;
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_DATA, p, &o);
+ if (r < 0)
+ return r;
+
if (ret)
*ret = o;
if (ret)
*ret = o;
@@
-772,14
+780,14
@@
static int journal_file_append_data(JournalFile *f, const void *data, uint64_t s
uint64_t journal_file_entry_n_items(Object *o) {
assert(o);
uint64_t journal_file_entry_n_items(Object *o) {
assert(o);
- assert(o->object.type ==
htole64(OBJECT_ENTRY)
);
+ assert(o->object.type ==
OBJECT_ENTRY
);
return (le64toh(o->object.size) - offsetof(Object, entry.items)) / sizeof(EntryItem);
}
static uint64_t journal_file_entry_array_n_items(Object *o) {
assert(o);
return (le64toh(o->object.size) - offsetof(Object, entry.items)) / sizeof(EntryItem);
}
static uint64_t journal_file_entry_array_n_items(Object *o) {
assert(o);
- assert(o->object.type ==
htole64(OBJECT_ENTRY_ARRAY)
);
+ assert(o->object.type ==
OBJECT_ENTRY_ARRAY
);
return (le64toh(o->object.size) - offsetof(Object, entry_array.items)) / sizeof(uint64_t);
}
return (le64toh(o->object.size) - offsetof(Object, entry_array.items)) / sizeof(uint64_t);
}
@@
-834,7
+842,7
@@
static int link_entry_into_array(JournalFile *f,
o->entry_array.items[i] = htole64(p);
if (ap == 0)
o->entry_array.items[i] = htole64(p);
if (ap == 0)
- *first =
q
;
+ *first =
htole64(q)
;
else {
r = journal_file_move_to_object(f, OBJECT_ENTRY_ARRAY, ap, &o);
if (r < 0)
else {
r = journal_file_move_to_object(f, OBJECT_ENTRY_ARRAY, ap, &o);
if (r < 0)
@@
-867,7
+875,7
@@
static int link_entry_into_array_plus_one(JournalFile *f,
else {
uint64_t i;
else {
uint64_t i;
- i =
le64toh(*idx) - 1
;
+ i =
htole64(le64toh(*idx) - 1)
;
r = link_entry_into_array(f, first, &i, p);
if (r < 0)
return r;
r = link_entry_into_array(f, first, &i, p);
if (r < 0)
return r;
@@
-2104,7
+2112,7
@@
int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint6
void journal_default_metrics(JournalMetrics *m, int fd) {
uint64_t fs_size = 0;
struct statvfs ss;
void journal_default_metrics(JournalMetrics *m, int fd) {
uint64_t fs_size = 0;
struct statvfs ss;
- char a[
64], b[64], c[64], d[64
];
+ char a[
FORMAT_BYTES_MAX], b[FORMAT_BYTES_MAX], c[FORMAT_BYTES_MAX], d[FORMAT_BYTES_MAX
];
assert(m);
assert(fd >= 0);
assert(m);
assert(fd >= 0);