login
Header Space

 
 

Re: Possible race between direct IO and JBD?

Score:
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Jan Kara <jack@...>
Cc: Badari Pulavarty <pbadari@...>, <akpm@...>, <linux-ext4@...>, <linux-kernel@...>
Date: Monday, April 28, 2008 - 3:09 pm

On Mon, 2008-04-28 at 20:09 +0200, Jan Kara wrote: 

Thanks, yes I noticed that after you pointing this out.

But __journal_try_to_free_buffer() only unfile the buffer from
t_sync_datalist or t_locked list, the journal head is not removed in
journal_remove_journal_head() there, at that time,
journal_remove_journal_head() just check if counter b_jcount is 0. But
before calling __journal_try_to_free_buffer(), since
journal_try_to_free_buffers() already increase the b_jcount in
journal_grab_journal_head(), so the journal head is not removed in
__journal_try_to_free_buffer-> journal_remove_journal_head()


Looking at the code, it seems the it's the journal_put_journal_head(jh)
who remove the journal head and decrease the bh

journal_try_to_free_buffers() 
{
...

jh = journal_grab_journal_head(bh);
                if (!jh)
                        continue;

                jbd_lock_bh_state(bh);
                __journal_try_to_free_buffer(journal, bh);
                journal_put_journal_head(jh);
                jbd_unlock_bh_state(bh);

...

}
 so when journal_put_journal_head()-> __journal_remove_journal_head(),
now the b_jcount is zero, but is  
jh->b_transaction is NULL? So it seems possible that bh ref count is non
zero when exit from journal_put_journal_head() if jh_b_transaction is
not cleared.

I miss where jh->b_transaction is clear to NULL? 

void journal_put_journal_head(struct journal_head *jh)
{
        struct buffer_head *bh = jh2bh(jh);

        jbd_lock_bh_journal_head(bh);
        J_ASSERT_JH(jh, jh->b_jcount > 0);
        --jh->b_jcount;
        if (!jh->b_jcount && !jh->b_transaction) {
                __journal_remove_journal_head(bh);
                __brelse(bh);
        }
        jbd_unlock_bh_journal_head(bh);
}


Mingming


--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[RFC] JBD ordered mode rewrite, Jan Kara, (Thu Mar 6, 1:42 pm)
Possible race between direct IO and JBD?, Mingming Cao, (Fri Apr 25, 7:38 pm)
Re: Possible race between direct IO and JBD?, Jan Kara, (Mon Apr 28, 8:26 am)
Re: Possible race between direct IO and JBD?, Badari Pulavarty, (Mon Apr 28, 1:11 pm)
Re: Possible race between direct IO and JBD?, Jan Kara, (Mon Apr 28, 2:09 pm)
Re: Possible race between direct IO and JBD?, Mingming Cao, (Mon Apr 28, 3:09 pm)
Re: Possible race between direct IO and JBD?, Jan Kara, (Tue Apr 29, 8:43 am)
Re: Possible race between direct IO and JBD?, Mingming Cao, (Tue Apr 29, 1:49 pm)
Re: Possible race between direct IO and JBD?, Andrew Morton, (Sat Apr 26, 6:41 am)
Re: [RFC] JBD ordered mode rewrite, Andreas Dilger, (Fri Mar 7, 7:52 pm)
Re: [RFC] JBD ordered mode rewrite, Jan Kara, (Mon Mar 10, 3:54 pm)
Re: [RFC] JBD ordered mode rewrite, Andreas Dilger, (Mon Mar 10, 5:37 pm)
Re: [RFC] JBD ordered mode rewrite, Christoph Hellwig, (Sat Mar 8, 8:14 am)
Re: [RFC] JBD ordered mode rewrite, Mingming Cao, (Fri Mar 7, 8:08 pm)
Re: [RFC] JBD ordered mode rewrite, Mingming Cao, (Fri Mar 7, 6:55 am)
Re: [RFC] JBD ordered mode rewrite, Jan Kara, (Mon Mar 10, 2:29 pm)
Re: [RFC] JBD ordered mode rewrite, Mark Fasheh, (Thu Mar 6, 9:34 pm)
Re: [RFC] JBD ordered mode rewrite, Jan Kara, (Mon Mar 10, 2:00 pm)
Re: [RFC] JBD ordered mode rewrite, Andrew Morton, (Thu Mar 6, 7:53 pm)
Re: [RFC] JBD ordered mode rewrite, Jan Kara, (Mon Mar 10, 1:38 pm)
Re: [RFC] JBD ordered mode rewrite, Josef Bacik, (Thu Mar 6, 3:05 pm)
Re: [RFC] JBD ordered mode rewrite, Jan Kara, (Mon Mar 10, 12:30 pm)
speck-geostationary