mirror of
https://github.com/systemd/systemd.git
synced 2025-03-19 22:50:17 +03:00
journal-file: fix archiving offline journals
The existing set_offline() short-circuit erroneously included when f->archive was true and header->state was STATE_OFFLINE. This commit makes the short-circuit f->archive aware, so it will only catch scenarios where there's not an offlining in progress and the header state matches the target state of either archived or offline. Fixes https://github.com/systemd/systemd/issues/17770
This commit is contained in:
parent
356b7a58f3
commit
bb1296b55a
@ -208,6 +208,7 @@ static bool journal_file_set_offline_try_restart(JournalFile *f) {
|
||||
* context without involving another thread.
|
||||
*/
|
||||
int journal_file_set_offline(JournalFile *f, bool wait) {
|
||||
int target_state;
|
||||
bool restarted;
|
||||
int r;
|
||||
|
||||
@ -219,9 +220,13 @@ int journal_file_set_offline(JournalFile *f, bool wait) {
|
||||
if (f->fd < 0 || !f->header)
|
||||
return -EINVAL;
|
||||
|
||||
target_state = f->archive ? STATE_ARCHIVED : STATE_OFFLINE;
|
||||
|
||||
/* An offlining journal is implicitly online and may modify f->header->state,
|
||||
* we must also join any potentially lingering offline thread when not online. */
|
||||
if (!journal_file_is_offlining(f) && f->header->state != STATE_ONLINE)
|
||||
* we must also join any potentially lingering offline thread when already in
|
||||
* the desired offline state.
|
||||
*/
|
||||
if (!journal_file_is_offlining(f) && f->header->state == target_state)
|
||||
return journal_file_set_offline_thread_join(f);
|
||||
|
||||
/* Restart an in-flight offline thread and wait if needed, or join a lingering done one. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user