Skip to content

Commit

Permalink
ocfs2: Support nested transactions
Browse files Browse the repository at this point in the history
OCFS2 can easily support nested transactions. We just have to
take care and not spoil statistics acquire semaphore unnecessarily.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
  • Loading branch information
Jan Kara authored and Mark Fasheh committed Jan 5, 2009
1 parent 12c7752 commit 90e86a6
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions fs/ocfs2/journal.c
Original file line number Diff line number Diff line change
Expand Up @@ -256,11 +256,9 @@ handle_t *ocfs2_start_trans(struct ocfs2_super *osb, int max_buffs)
BUG_ON(osb->journal->j_state == OCFS2_JOURNAL_FREE);
BUG_ON(max_buffs <= 0);

/* JBD might support this, but our journalling code doesn't yet. */
if (journal_current_handle()) {
mlog(ML_ERROR, "Recursive transaction attempted!\n");
BUG();
}
/* Nested transaction? Just return the handle... */
if (journal_current_handle())
return jbd2_journal_start(journal, max_buffs);

down_read(&osb->journal->j_trans_barrier);

Expand All @@ -285,16 +283,18 @@ handle_t *ocfs2_start_trans(struct ocfs2_super *osb, int max_buffs)
int ocfs2_commit_trans(struct ocfs2_super *osb,
handle_t *handle)
{
int ret;
int ret, nested;
struct ocfs2_journal *journal = osb->journal;

BUG_ON(!handle);

nested = handle->h_ref > 1;
ret = jbd2_journal_stop(handle);
if (ret < 0)
mlog_errno(ret);

up_read(&journal->j_trans_barrier);
if (!nested)
up_read(&journal->j_trans_barrier);

return ret;
}
Expand Down

0 comments on commit 90e86a6

Please sign in to comment.