Messages in this thread Patch in this message | | | Subject | [RFC] probably invalid accounting in jbd | From | Alex Tomas <> | Date | Fri, 23 May 2003 11:20:31 +0000 |
| |
hi!
I think current journal_release_buffer() which is used by ext3 allocator in -mm tree has a bug. look, it won't decrement credits if concurrent thread already put buffer on metadata list. but this may ext3_try_to_allocate() may overflow handle's credist. so, jbd will hit J_ASSERT_JH(jh, handle->h_buffer_credits > 0) somewhere
void journal_release_buffer (handle_t *handle, struct buffer_head *bh) { ..... if (jh->b_jlist == BJ_Reserved && jh->b_transaction == transaction && !buffer_jdirty(jh2bh(jh))) { JBUFFER_TRACE(jh, "unused: refiling it"); handle->h_buffer_credits++; __journal_refile_buffer(jh); } .... }
here is the patch against 2.5.69-mm6:
diff -puNr linux-2.5.69-mm6/fs/jbd/transaction.c edited/fs/jbd/transaction.c --- linux-2.5.69-mm6/fs/jbd/transaction.c Fri May 16 18:03:20 2003 +++ b_commited_data-race/fs/jbd/transaction.c Fri May 23 11:10:21 2003 @@ -1146,10 +1146,10 @@ void journal_release_buffer (handle_t *h if (jh->b_jlist == BJ_Reserved && jh->b_transaction == transaction && !buffer_jdirty(jh2bh(jh))) { JBUFFER_TRACE(jh, "unused: refiling it"); - handle->h_buffer_credits++; __journal_refile_buffer(jh); } spin_unlock(&journal_datalist_lock); + handle->h_buffer_credits++; JBUFFER_TRACE(jh, "exit"); unlock_journal(journal); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |