From: Vito Caputo Date: Thu, 25 Nov 2021 23:24:48 +0000 (-0800) Subject: journal: stop using JournalFile.mmap everywhere X-Git-Tag: v250-rc1~27^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8b4fbbb0a121028c9304e96df322ce491f551e34;p=thirdparty%2Fsystemd.git journal: stop using JournalFile.mmap everywhere Preparatory commit; before JournalFile can stop hanging onto its copy of MMapCache, all these users need to find another way. Most of the time these callers already have the MMapCache onhand, so it's no big deal for them to just supply it. journal_file_rotate() in particular needed to change, and it seemed wise to not use the mmap_cache_fd_cache() accessor on f->cache_fd, instead requiring the caller supply the cache to use. This was done with an eye towards a potential future where the journal_file_archive() isolates the cache_fd to a private cache, which the newly rotated-to file wouldn't be allowed to use. It's no biggie for the existing callers to just provide the appropriate surviving cache. Basically the mmap_cache_fd_cache() accessor was added just for journal-verify.c's (ab)use of the mmap-cache. Which, if the ugly singleton MMapCache assumption ever goes away, can be cleaned up to simply use a separate MMapCache for those search arrays. --- diff --git a/src/journal-remote/journal-remote-write.c b/src/journal-remote/journal-remote-write.c index fd7cb91f2c0..b82cb101184 100644 --- a/src/journal-remote/journal-remote-write.c +++ b/src/journal-remote/journal-remote-write.c @@ -3,8 +3,8 @@ #include "alloc-util.h" #include "journal-remote.h" -static int do_rotate(JournaldFile **f, bool compress, bool seal) { - int r = journald_file_rotate(f, compress, UINT64_MAX, seal, NULL); +static int do_rotate(JournaldFile **f, MMapCache *m, bool compress, bool seal) { + int r = journald_file_rotate(f, m, compress, UINT64_MAX, seal, NULL); if (r < 0) { if (*f) log_error_errno(r, "Failed to rotate %s: %m", (*f)->file->path); @@ -71,7 +71,7 @@ int writer_write(Writer *w, if (journal_file_rotate_suggested(w->journal->file, 0, LOG_DEBUG)) { log_info("%s: Journal header limits reached or header out-of-date, rotating", w->journal->file->path); - r = do_rotate(&w->journal, compress, seal); + r = do_rotate(&w->journal, w->mmap, compress, seal); if (r < 0) return r; } @@ -87,7 +87,7 @@ int writer_write(Writer *w, return r; log_debug_errno(r, "%s: Write failed, rotating: %m", w->journal->file->path); - r = do_rotate(&w->journal, compress, seal); + r = do_rotate(&w->journal, w->mmap, compress, seal); if (r < 0) return r; else diff --git a/src/journal/journald-file.c b/src/journal/journald-file.c index 7f607d4aa60..be3fc1615a8 100644 --- a/src/journal/journald-file.c +++ b/src/journal/journald-file.c @@ -403,6 +403,7 @@ JournaldFile* journald_file_initiate_close(JournaldFile *f, Set *deferred_closes int journald_file_rotate( JournaldFile **f, + MMapCache *mmap_cache, bool compress, uint64_t compress_threshold_bytes, bool seal, @@ -428,7 +429,7 @@ int journald_file_rotate( compress_threshold_bytes, seal, NULL, /* metrics */ - (*f)->file->mmap, + mmap_cache, deferred_closes, *f, /* template */ &new_file); diff --git a/src/journal/journald-file.h b/src/journal/journald-file.h index 341043c8362..79c0ef82404 100644 --- a/src/journal/journald-file.h +++ b/src/journal/journald-file.h @@ -40,4 +40,4 @@ int journald_file_open_reliably( JournaldFile **ret); JournaldFile* journald_file_initiate_close(JournaldFile *f, Set *deferred_closes); -int journald_file_rotate(JournaldFile **f, bool compress, uint64_t compress_threshold_bytes, bool seal, Set *deferred_closes); +int journald_file_rotate(JournaldFile **f, MMapCache *mmap_cache, bool compress, uint64_t compress_threshold_bytes, bool seal, Set *deferred_closes); diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c index a13bbeeee9f..c04801d9fca 100644 --- a/src/journal/journald-server.c +++ b/src/journal/journald-server.c @@ -465,7 +465,7 @@ static int do_rotate( if (!*f) return -EINVAL; - r = journald_file_rotate(f, s->compress.enabled, s->compress.threshold_bytes, seal, s->deferred_closes); + r = journald_file_rotate(f, s->mmap, s->compress.enabled, s->compress.threshold_bytes, seal, s->deferred_closes); if (r < 0) { if (*f) return log_error_errno(r, "Failed to rotate %s: %m", (*f)->file->path); diff --git a/src/journal/test-journal.c b/src/journal/test-journal.c index c2c4a75fef6..17c6a73db30 100644 --- a/src/journal/test-journal.c +++ b/src/journal/test-journal.c @@ -98,8 +98,8 @@ static void test_non_empty(void) { assert_se(journal_file_move_to_entry_by_seqnum(f->file, 10, DIRECTION_DOWN, &o, NULL) == 0); - journald_file_rotate(&f, true, UINT64_MAX, true, NULL); - journald_file_rotate(&f, true, UINT64_MAX, true, NULL); + journald_file_rotate(&f, NULL, true, UINT64_MAX, true, NULL); + journald_file_rotate(&f, NULL, true, UINT64_MAX, true, NULL); (void) journald_file_close(f); diff --git a/src/libsystemd/sd-journal/journal-file.h b/src/libsystemd/sd-journal/journal-file.h index ecda2b3cc0c..90c9dbe6374 100644 --- a/src/libsystemd/sd-journal/journal-file.h +++ b/src/libsystemd/sd-journal/journal-file.h @@ -232,6 +232,7 @@ void journal_file_dump(JournalFile *f); void journal_file_print_header(JournalFile *f); int journal_file_archive(JournalFile *f, char **ret_previous_path); +JournalFile* journal_initiate_close(JournalFile *f, Set *deferred_closes); int journal_file_dispose(int dir_fd, const char *fname); diff --git a/src/libsystemd/sd-journal/journal-verify.c b/src/libsystemd/sd-journal/journal-verify.c index b6427105c22..8288ebcd6e9 100644 --- a/src/libsystemd/sd-journal/journal-verify.c +++ b/src/libsystemd/sd-journal/journal-verify.c @@ -885,6 +885,7 @@ int journal_file_verify( unsigned i; bool found_last = false; const char *tmp_dir = NULL; + MMapCache *m; #if HAVE_GCRYPT uint64_t last_tag = 0; @@ -929,19 +930,20 @@ int journal_file_verify( goto fail; } - cache_data_fd = mmap_cache_add_fd(f->mmap, data_fd, PROT_READ|PROT_WRITE); + m = mmap_cache_fd_cache(f->cache_fd); + cache_data_fd = mmap_cache_add_fd(m, data_fd, PROT_READ|PROT_WRITE); if (!cache_data_fd) { r = log_oom(); goto fail; } - cache_entry_fd = mmap_cache_add_fd(f->mmap, entry_fd, PROT_READ|PROT_WRITE); + cache_entry_fd = mmap_cache_add_fd(m, entry_fd, PROT_READ|PROT_WRITE); if (!cache_entry_fd) { r = log_oom(); goto fail; } - cache_entry_array_fd = mmap_cache_add_fd(f->mmap, entry_array_fd, PROT_READ|PROT_WRITE); + cache_entry_array_fd = mmap_cache_add_fd(m, entry_array_fd, PROT_READ|PROT_WRITE); if (!cache_entry_array_fd) { r = log_oom(); goto fail;