lkml.org 
[lkml]   [2008]   [May]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH][take 5] JBD2: Fix race between free buffer and commit trasanction
On Wed, May 28, 2008 at 05:18:19PM -0700, Mingming Cao wrote:
> Index: linux-2.6.26-rc3/fs/jbd2/transaction.c
> ===================================================================
> --- linux-2.6.26-rc3.orig/fs/jbd2/transaction.c 2008-05-28 16:10:41.000000000 -0700
> +++ linux-2.6.26-rc3/fs/jbd2/transaction.c 2008-05-28 16:13:16.000000000 -0700
> @@ -1656,12 +1656,42 @@ out:
> return;
> }
>
> +/*
> + * jbd2_journal_try_to_free_buffers() could race with jbd2_journal_commit_transaction()
> + * The later might still hold the reference count to the buffers when inspecting
> + * them on t_syncdata_list or t_locked_list.
> + *
> + * jbd2_journal_try_to_free_buffers() will call this function to
> + * wait for the current transaction to finish syncing data buffers, before
> + * try to free that buffer.
> + *
> + * Called with journal->j_state_lock hold.
> + */

We are taking the spin_lock again in the function ??



> +static void jbd2_journal_wait_for_transaction_sync_data(journal_t *journal)
> +{
> + transaction_t *transaction = NULL;
> + tid_t tid;
> +
> + spin_lock(&journal->j_state_lock);
> + transaction = journal->j_committing_transaction;
> +
> + if (!transaction) {
> + spin_unlock(&journal->j_state_lock);
> + return;
> + }
> +
> + tid = transaction->t_tid;
> + spin_unlock(&journal->j_state_lock);
> + jbd2_log_wait_commit(journal, tid);
> +}


[.... snip.... ]


> + if (ret == 0 && (gfp_mask & __GFP_WAIT) && (gfp_mask & __GFP_FS)) {
> + spin_lock(&journal->j_state_lock);
> + jbd2_journal_wait_for_transaction_sync_data(journal);
> + ret = try_to_free_buffers(page);
> + spin_unlock(&journal->j_state_lock);
> + }
> +
> busy:
> return ret;
> }
>
>

-aneesh


\
 
 \ /
  Last update: 2008-05-30 08:27    [W:1.439 / U:0.004 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site