]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
log: Switch logging to runtime when FS becomes read-only
authorRichard Phibel <rphibel@googlemail.com>
Mon, 5 Dec 2022 12:40:41 +0000 (13:40 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Mon, 5 Dec 2022 23:53:47 +0000 (00:53 +0100)
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.

src/journal/journald-server.c

index a223f4fb2b61a5940be3bc600215e4087b2f925d..928e07104b40c48d6c1ca6f3fe38897fa29027b0 100644 (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;