chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
udev: path_id - set supported_parent for well-known SCSI setups
[elogind.git]
/
src
/
journal
/
journal-file.c
diff --git
a/src/journal/journal-file.c
b/src/journal/journal-file.c
index d3535d2fadcb2edad6756bc8915c93f76e09473b..8a2c0fcac52d7efd3ec666e9b89aa2ae2fec81c4 100644
(file)
--- a/
src/journal/journal-file.c
+++ b/
src/journal/journal-file.c
@@
-136,7
+136,7
@@
void journal_file_close(JournalFile *f) {
if (f->mmap)
mmap_cache_unref(f->mmap);
if (f->mmap)
mmap_cache_unref(f->mmap);
- hashmap_free_free(f->chain_cache);
+
ordered_
hashmap_free_free(f->chain_cache);
#if defined(HAVE_XZ) || defined(HAVE_LZ4)
free(f->compress_buffer);
#if defined(HAVE_XZ) || defined(HAVE_LZ4)
free(f->compress_buffer);
@@
-279,12
+279,6
@@
static int journal_file_verify_header(JournalFile *f) {
!VALID64(le64toh(f->header->entry_array_offset)))
return -ENODATA;
!VALID64(le64toh(f->header->entry_array_offset)))
return -ENODATA;
- if (le64toh(f->header->data_hash_table_offset) < le64toh(f->header->header_size) ||
- le64toh(f->header->field_hash_table_offset) < le64toh(f->header->header_size) ||
- le64toh(f->header->tail_object_offset) < le64toh(f->header->header_size) ||
- le64toh(f->header->entry_array_offset) < le64toh(f->header->header_size))
- return -ENODATA;
-
if (f->writable) {
uint8_t state;
sd_id128_t machine_id;
if (f->writable) {
uint8_t state;
sd_id128_t machine_id;
@@
-397,7
+391,7
@@
static int journal_file_move_to(JournalFile *f, int context, bool keep_always, u
return -EADDRNOTAVAIL;
}
return -EADDRNOTAVAIL;
}
- return mmap_cache_get(f->mmap, f->fd, f->prot, context, keep_always, offset, size, &f->last_stat, ret);
+ return mmap_cache_get(f->mmap, f->fd, f->prot, context, keep_always, offset, size, &f->last_stat, ret
, NULL
);
}
static uint64_t minimum_header_size(Object *o) {
}
static uint64_t minimum_header_size(Object *o) {
@@
-431,7
+425,6
@@
int journal_file_move_to_object(JournalFile *f, int type, uint64_t offset, Objec
if (!VALID64(offset))
return -EFAULT;
if (!VALID64(offset))
return -EFAULT;
-
r = journal_file_move_to(f, type_to_context(type), false, offset, sizeof(ObjectHeader), &t);
if (r < 0)
return r;
r = journal_file_move_to(f, type_to_context(type), false, offset, sizeof(ObjectHeader), &t);
if (r < 0)
return r;
@@
-819,7
+812,9
@@
int journal_file_find_data_object_with_hash(
goto next;
if (o->object.flags & OBJECT_COMPRESSION_MASK) {
goto next;
if (o->object.flags & OBJECT_COMPRESSION_MASK) {
- uint64_t l, rsize;
+#if defined(HAVE_XZ) || defined(HAVE_LZ4)
+ uint64_t l;
+ size_t rsize;
l = le64toh(o->object.size);
if (l <= offsetof(Object, data.payload))
l = le64toh(o->object.size);
if (l <= offsetof(Object, data.payload))
@@
-843,7
+838,9
@@
int journal_file_find_data_object_with_hash(
return 1;
}
return 1;
}
-
+#else
+ return -EPROTONOSUPPORT;
+#endif
} else if (le64toh(o->object.size) == osize &&
memcmp(o->data.payload, data, size) == 0) {
} else if (le64toh(o->object.size) == osize &&
memcmp(o->data.payload, data, size) == 0) {
@@
-982,7
+979,7
@@
static int journal_file_append_data(
#if defined(HAVE_XZ) || defined(HAVE_LZ4)
if (f->compress_xz &&
size >= COMPRESSION_SIZE_THRESHOLD) {
#if defined(HAVE_XZ) || defined(HAVE_LZ4)
if (f->compress_xz &&
size >= COMPRESSION_SIZE_THRESHOLD) {
-
uint64
_t rsize;
+
size
_t rsize;
compression = compress_blob(data, size, o->data.payload, &rsize);
compression = compress_blob(data, size, o->data.payload, &rsize);
@@
-990,7
+987,7
@@
static int journal_file_append_data(
o->object.size = htole64(offsetof(Object, data.payload) + rsize);
o->object.flags |= compression;
o->object.size = htole64(offsetof(Object, data.payload) + rsize);
o->object.flags |= compression;
- log_debug("Compressed data object %"PRIu64" -> %
"PRIu64"
using %s",
+ log_debug("Compressed data object %"PRIu64" -> %
zu
using %s",
size, rsize, object_compressed_to_string(compression));
}
}
size, rsize, object_compressed_to_string(compression));
}
}
@@
-1369,7
+1366,7
@@
typedef struct ChainCacheItem {
} ChainCacheItem;
static void chain_cache_put(
} ChainCacheItem;
static void chain_cache_put(
- Hashmap *h,
+
Ordered
Hashmap *h,
ChainCacheItem *ci,
uint64_t first,
uint64_t array,
ChainCacheItem *ci,
uint64_t first,
uint64_t array,
@@
-1383,9
+1380,10
@@
static void chain_cache_put(
if (array == first)
return;
if (array == first)
return;
- if (hashmap_size(h) >= CHAIN_CACHE_MAX)
- ci = hashmap_steal_first(h);
- else {
+ if (ordered_hashmap_size(h) >= CHAIN_CACHE_MAX) {
+ ci = ordered_hashmap_steal_first(h);
+ assert(ci);
+ } else {
ci = new(ChainCacheItem, 1);
if (!ci)
return;
ci = new(ChainCacheItem, 1);
if (!ci)
return;
@@
-1393,7
+1391,7
@@
static void chain_cache_put(
ci->first = first;
ci->first = first;
- if (hashmap_put(h, &ci->first, ci) < 0) {
+ if (
ordered_
hashmap_put(h, &ci->first, ci) < 0) {
free(ci);
return;
}
free(ci);
return;
}
@@
-1422,7
+1420,7
@@
static int generic_array_get(
a = first;
/* Try the chain cache first */
a = first;
/* Try the chain cache first */
- ci = hashmap_get(f->chain_cache, &first);
+ ci =
ordered_
hashmap_get(f->chain_cache, &first);
if (ci && i > ci->total) {
a = ci->array;
i -= ci->total;
if (ci && i > ci->total) {
a = ci->array;
i -= ci->total;
@@
-1525,7
+1523,7
@@
static int generic_array_bisect(
/* Start with the first array in the chain */
a = first;
/* Start with the first array in the chain */
a = first;
- ci = hashmap_get(f->chain_cache, &first);
+ ci =
ordered_
hashmap_get(f->chain_cache, &first);
if (ci && n > ci->total) {
/* Ah, we have iterated this bisection array chain
* previously! Let's see if we can skip ahead in the
if (ci && n > ci->total) {
/* Ah, we have iterated this bisection array chain
* previously! Let's see if we can skip ahead in the
@@
-2501,7
+2499,7
@@
int journal_file_open(
goto fail;
}
goto fail;
}
- f->chain_cache =
hashmap_new(uint64_hash_func, uint64_compare_func
);
+ f->chain_cache =
ordered_hashmap_new(&uint64_hash_ops
);
if (!f->chain_cache) {
r = -ENOMEM;
goto fail;
if (!f->chain_cache) {
r = -ENOMEM;
goto fail;
@@
-2772,7
+2770,8
@@
int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint6
return -E2BIG;
if (o->object.flags & OBJECT_COMPRESSION_MASK) {
return -E2BIG;
if (o->object.flags & OBJECT_COMPRESSION_MASK) {
- uint64_t rsize;
+#if defined(HAVE_XZ) || defined(HAVE_LZ4)
+ size_t rsize;
r = decompress_blob(o->object.flags & OBJECT_COMPRESSION_MASK,
o->data.payload, l, &from->compress_buffer, &from->compress_buffer_size, &rsize, 0);
r = decompress_blob(o->object.flags & OBJECT_COMPRESSION_MASK,
o->data.payload, l, &from->compress_buffer, &from->compress_buffer_size, &rsize, 0);
@@
-2781,6
+2780,9
@@
int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint6
data = from->compress_buffer;
l = rsize;
data = from->compress_buffer;
l = rsize;
+#else
+ return -EPROTONOSUPPORT;
+#endif
} else
data = o->data.payload;
} else
data = o->data.payload;