log: Switch logging to runtime when FS becomes read-only

The journal has a mechanism to log to the runtime journal if it fails to
log to the system journal. This mechanism is not triggered when the file
system becomes read-only. We enable it here.

When appending an entry fails if shall_try_append_again returns true,
the journal is rotated. If the FS is read-only, rotation will fail and
s->system_journal will be set to NULL. After that, when find_journal
will try to open the journal since s->system_journal will be NULL, it
will open the runtime journal.
This commit is contained in:
Richard Phibel
2022-12-06 00:53:47 +01:00
committed by Luca Boccassi
parent a5d63f1e29
commit 379864f890
+8
View File
@@ -801,6 +801,14 @@ static bool shall_try_append_again(JournalFile *f, int r) {
log_debug("%s: Allocation limit reached, rotating.", f->path);
return true;
case -EROFS: /* Read-only file system */
/* When appending an entry fails if shall_try_append_again returns true, the journal is
* rotated. If the FS is read-only, rotation will fail and s->system_journal will be set to
* NULL. After that, when find_journal will try to open the journal since s->system_journal
* will be NULL, it will open the runtime journal. */
log_ratelimit_warning(JOURNALD_LOG_RATELIMIT, "%s: Read-only file system, rotating.", f->path);
return true;
case -EIO: /* I/O error of some kind (mmap) */
log_ratelimit_warning(JOURNAL_LOG_RATELIMIT, "%s: IO error, rotating.", f->path);
return true;