On Mon 06-06-11 10:16:30, Ted Tso wrote: > On Mon, May 30, 2011 at 05:12:58PM +0200, Jan Kara wrote: > > /* > > - * For the unlocked version of this call, also make sure that any > > - * hanging journal_head is cleaned up if necessary. > > + * For the unlocked version of this call, also drop buffer_head reference. > > * > > * __jbd2_journal_refile_buffer is usually called as part of a single locked > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > > Doesn't this paragraph refer to jbd2_journal_refile_buffer(), not > __jbd2_journal_refile_buffer()? Or am I missing something? Hmm, the comment seems to be wrong. The comment about buffer_head reference does not apply anymore. I'll fix that. > > void jbd2_journal_refile_buffer(journal_t *journal, struct journal_head *jh) > > { > > struct buffer_head *bh = jh2bh(jh); > > > > + /* Get reference so that buffer cannot be freed before we unlock it */ > > + get_bh(bh); > > OK, so we're adding a get_bh(bh) call to jbd2_journal_refile_buffer(), > which we're not freeing later in the function. So this means every > single place where we call jbd2_journal_refile_buffer(), we'd better > add put_bh(bh) or bhrelse(bh) call, right? Well, we are adding get_bh() but we are now also using jbd2_journal_put_journal_head() instead of jbd2_journal_remove_journal_head() and the former call does additional __brelse(). Probably a better way to look at this is that jbd2_journal_remove_journal_head() now gets a reference and puts it at the end of that function. jbd2_journal_put_journal_head() cares about releasing bh reference held by journal_head. So the logic ends up being simpler than it used to be. > So in fs/jbd2/commit.c, line 418, in jbd2_journal_commit_transaction(), > I see a call to jbd2_journal_refile_buffer(), which the patch doesn't > seem to adjust. Looks like this could cause a buffer leak? > > In your testing, have you checked to the slab cache to make sure there > isn't any memory leakage going on with buffer heads? Not really - I now ran fsxlinux and fsstress and both the number of buffer_head and journal_head slabs seem to be under control. Honza -- Jan Kara <jack@xxxxxxx> SUSE Labs, CR -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html