Ugh, im sorry ignore this one ( i need to start removing these older patch files), this has already been merged. Sorry about that.
On Thu, Jul 9, 2026 at 9:35 PM Milos Nikic <[email protected]> wrote: > --- > ext2fs/journal.c | 17 +++++++++++++++-- > 1 file changed, 15 insertions(+), 2 deletions(-) > > diff --git a/ext2fs/journal.c b/ext2fs/journal.c > index e456eafc2..c50c742f8 100644 > --- a/ext2fs/journal.c > +++ b/ext2fs/journal.c > @@ -1127,7 +1127,20 @@ journal_stop_transaction_locked (journal_t *journal, > } > } > > -/* Must strictly be called OUTSIDE the journal lock */ > +/** > + * Drains the thread-local deferred block queue into a new transaction. > + * When a thread is forced to execute a synchronous checkpoint (which > locks the > + * global libdiskfs node-cache), any memory mutations triggered by the > VFS flush > + * are intercepted and stored in a thread-local queue to prevent a > recursive > + * deadlock against the journal lock. > + * This function "sweeps" those intercepted blocks by explicitly starting > a > + * new transaction. The act of starting the transaction automatically > injects > + * the deferred blocks into the new transaction's map (via the internal > + * diskfs_journal_start_transaction_locked logic). We then immediately > stop > + * the transaction to allow the normal journal commit pipeline to process > them. > + * > + * Must strictly be called OUTSIDE the journal lock. > + */ > static void > journal_drain_deferred_blocks (void) > { > @@ -1571,7 +1584,7 @@ diskfs_journal_start_transaction_locked (journal_t > *journal) > /* THE SWEEP: Safely inject deferred blocks into our brand new > transaction */ > if (deferred_count > 0) > { > - /* Copy to local var and reset count immediately to prevent any > + /* Copy to local var and reset count immediately to prevent any > impossible recursion loops during dirty_block */ > int count = deferred_count; > deferred_count = 0; > -- > 2.54.0 > >
