Applied, thanks!
Milos Nikic, le sam. 30 mai 2026 21:11:58 -0700, a ecrit:
> ---
> 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
>
>