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
> 
> 

Reply via email to