diff options
Diffstat (limited to 'src/libsystemd/sd-journal')
-rw-r--r-- | src/libsystemd/sd-journal/journal-file.c | 156 | ||||
-rw-r--r-- | src/libsystemd/sd-journal/journal-file.h | 1 |
2 files changed, 78 insertions, 79 deletions
diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c index a7c65b1ccd..c19f0ce382 100644 --- a/src/libsystemd/sd-journal/journal-file.c +++ b/src/libsystemd/sd-journal/journal-file.c @@ -3341,6 +3341,84 @@ static int journal_file_warn_btrfs(JournalFile *f) { return 1; } +static void journal_default_metrics(JournalMetrics *m, int fd) { + struct statvfs ss; + uint64_t fs_size = 0; + + assert(m); + assert(fd >= 0); + + if (fstatvfs(fd, &ss) >= 0) + fs_size = ss.f_frsize * ss.f_blocks; + else + log_debug_errno(errno, "Failed to determine disk size: %m"); + + if (m->max_use == UINT64_MAX) { + + if (fs_size > 0) + m->max_use = CLAMP(PAGE_ALIGN(fs_size / 10), /* 10% of file system size */ + MAX_USE_LOWER, MAX_USE_UPPER); + else + m->max_use = MAX_USE_LOWER; + } else { + m->max_use = PAGE_ALIGN(m->max_use); + + if (m->max_use != 0 && m->max_use < JOURNAL_FILE_SIZE_MIN*2) + m->max_use = JOURNAL_FILE_SIZE_MIN*2; + } + + if (m->min_use == UINT64_MAX) { + if (fs_size > 0) + m->min_use = CLAMP(PAGE_ALIGN(fs_size / 50), /* 2% of file system size */ + MIN_USE_LOW, MIN_USE_HIGH); + else + m->min_use = MIN_USE_LOW; + } + + if (m->min_use > m->max_use) + m->min_use = m->max_use; + + if (m->max_size == UINT64_MAX) + m->max_size = MIN(PAGE_ALIGN(m->max_use / 8), /* 8 chunks */ + MAX_SIZE_UPPER); + else + m->max_size = PAGE_ALIGN(m->max_size); + + if (m->max_size != 0) { + if (m->max_size < JOURNAL_FILE_SIZE_MIN) + m->max_size = JOURNAL_FILE_SIZE_MIN; + + if (m->max_use != 0 && m->max_size*2 > m->max_use) + m->max_use = m->max_size*2; + } + + if (m->min_size == UINT64_MAX) + m->min_size = JOURNAL_FILE_SIZE_MIN; + else + m->min_size = CLAMP(PAGE_ALIGN(m->min_size), + JOURNAL_FILE_SIZE_MIN, + m->max_size ?: UINT64_MAX); + + if (m->keep_free == UINT64_MAX) { + if (fs_size > 0) + m->keep_free = MIN(PAGE_ALIGN(fs_size / 20), /* 5% of file system size */ + KEEP_FREE_UPPER); + else + m->keep_free = DEFAULT_KEEP_FREE; + } + + if (m->n_max_files == UINT64_MAX) + m->n_max_files = DEFAULT_N_MAX_FILES; + + log_debug("Fixed min_use=%s max_use=%s max_size=%s min_size=%s keep_free=%s n_max_files=%" PRIu64, + FORMAT_BYTES(m->min_use), + FORMAT_BYTES(m->max_use), + FORMAT_BYTES(m->max_size), + FORMAT_BYTES(m->min_size), + FORMAT_BYTES(m->keep_free), + m->n_max_files); +} + int journal_file_open( int fd, const char *fname, @@ -3770,84 +3848,6 @@ void journal_reset_metrics(JournalMetrics *m) { }; } -void journal_default_metrics(JournalMetrics *m, int fd) { - struct statvfs ss; - uint64_t fs_size = 0; - - assert(m); - assert(fd >= 0); - - if (fstatvfs(fd, &ss) >= 0) - fs_size = ss.f_frsize * ss.f_blocks; - else - log_debug_errno(errno, "Failed to determine disk size: %m"); - - if (m->max_use == UINT64_MAX) { - - if (fs_size > 0) - m->max_use = CLAMP(PAGE_ALIGN(fs_size / 10), /* 10% of file system size */ - MAX_USE_LOWER, MAX_USE_UPPER); - else - m->max_use = MAX_USE_LOWER; - } else { - m->max_use = PAGE_ALIGN(m->max_use); - - if (m->max_use != 0 && m->max_use < JOURNAL_FILE_SIZE_MIN*2) - m->max_use = JOURNAL_FILE_SIZE_MIN*2; - } - - if (m->min_use == UINT64_MAX) { - if (fs_size > 0) - m->min_use = CLAMP(PAGE_ALIGN(fs_size / 50), /* 2% of file system size */ - MIN_USE_LOW, MIN_USE_HIGH); - else - m->min_use = MIN_USE_LOW; - } - - if (m->min_use > m->max_use) - m->min_use = m->max_use; - - if (m->max_size == UINT64_MAX) - m->max_size = MIN(PAGE_ALIGN(m->max_use / 8), /* 8 chunks */ - MAX_SIZE_UPPER); - else - m->max_size = PAGE_ALIGN(m->max_size); - - if (m->max_size != 0) { - if (m->max_size < JOURNAL_FILE_SIZE_MIN) - m->max_size = JOURNAL_FILE_SIZE_MIN; - - if (m->max_use != 0 && m->max_size*2 > m->max_use) - m->max_use = m->max_size*2; - } - - if (m->min_size == UINT64_MAX) - m->min_size = JOURNAL_FILE_SIZE_MIN; - else - m->min_size = CLAMP(PAGE_ALIGN(m->min_size), - JOURNAL_FILE_SIZE_MIN, - m->max_size ?: UINT64_MAX); - - if (m->keep_free == UINT64_MAX) { - if (fs_size > 0) - m->keep_free = MIN(PAGE_ALIGN(fs_size / 20), /* 5% of file system size */ - KEEP_FREE_UPPER); - else - m->keep_free = DEFAULT_KEEP_FREE; - } - - if (m->n_max_files == UINT64_MAX) - m->n_max_files = DEFAULT_N_MAX_FILES; - - log_debug("Fixed min_use=%s max_use=%s max_size=%s min_size=%s keep_free=%s n_max_files=%" PRIu64, - FORMAT_BYTES(m->min_use), - FORMAT_BYTES(m->max_use), - FORMAT_BYTES(m->max_size), - FORMAT_BYTES(m->min_size), - FORMAT_BYTES(m->keep_free), - m->n_max_files); -} - int journal_file_get_cutoff_realtime_usec(JournalFile *f, usec_t *from, usec_t *to) { assert(f); assert(f->header); diff --git a/src/libsystemd/sd-journal/journal-file.h b/src/libsystemd/sd-journal/journal-file.h index 64b15eabed..be02b2624f 100644 --- a/src/libsystemd/sd-journal/journal-file.h +++ b/src/libsystemd/sd-journal/journal-file.h @@ -241,7 +241,6 @@ void journal_file_post_change(JournalFile *f); int journal_file_enable_post_change_timer(JournalFile *f, sd_event *e, usec_t t); void journal_reset_metrics(JournalMetrics *m); -void journal_default_metrics(JournalMetrics *m, int fd); int journal_file_get_cutoff_realtime_usec(JournalFile *f, usec_t *from, usec_t *to); int journal_file_get_cutoff_monotonic_usec(JournalFile *f, sd_id128_t boot, usec_t *from, usec_t *to); |