This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Hurd".
The branch, master has been updated
via 652fc5764f440117c470ade37c31578139dd01ca (commit)
from ef8480a8d28bb9c6b8b714d912975e66526d1a03 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 652fc5764f440117c470ade37c31578139dd01ca
Author: Milos Nikic <[email protected]>
Date: Fri Oct 9 09:21:45 2026 -0700
ext2fs: Checkpoint the journal from kjournald
Journal space came back only when the pager happened to write a
transaction's blocks home, or when a commit found the log full and
checkpointed in the committing thread, stalling it. Let kjournald
reclaim space in the background instead.
After each wake, kjournald checkpoints the oldest committed
transactions once less than half of the journal is free, and stops
once three quarters are free again. The gap keeps it from running on
every wake, and lets the pager write hot blocks lazily in between. A
background pass gives way between transactions to a requested commit,
to a commit in flight and to shutdown. A stop that finds the journal
past half full wakes kjournald at once rather than at the next tick.
kjournald used to commit on every wake. A wake now commits only on
the 5-second tick or when a stop requested it (j_commit_requested), so
that waking it to checkpoint does not force a commit.
Only one thread checkpoints at a time (j_checkpointing); a second
waits for the first and then flushes only what is still needed. While
the lock is dropped for I/O, the transaction being flushed is pinned
through t_outstanding_io, so that a pager write finishing its last
blocks cannot advance the tail and free it underneath the flusher.
The checkpoint inside commit stays as a fallback and now logs a
warning. To check that it is no longer needed in practice, I made it
panic: it never fired under a large apt upgrade, a full-disk stress
with parallel data and metadata load, and a 4 MB journal, the smallest
tune2fs allows.
With space reclaimed in the background, the sync_global calls on
journaled paths no longer serve to free the log. They only write
blocks home early, which works against the write-ahead order and grows
the intercept cache; later patches can drop them.
Message-ID: <[email protected]>
-----------------------------------------------------------------------
Summary of changes:
ext2fs/journal.c | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 117 insertions(+), 10 deletions(-)
hooks/post-receive
--
Hurd