jbd_lock_bh_state(bh);
spin_lock(&journal->j_list_lock);
- /*
- * Now we have the locks, check again to see whether kjournald has
- * taken the buffer off the transaction.
- */
- if (!buffer_jbd(bh))
- goto zap_buffer;
+ jh = journal_grab_journal_head(bh);
+ if (!jh)
+ goto zap_buffer_no_jh;
- jh = bh2jh(bh);
transaction = jh->b_transaction;
if (transaction == NULL) {
/* First case: not on any transaction. If it
spin_unlock(&journal->j_list_lock);
jbd_unlock_bh_state(bh);
spin_unlock(&journal->j_state_lock);
+ journal_put_journal_head(jh);
return ret;
} else {
/* There is no currently-running transaction. So the
spin_unlock(&journal->j_list_lock);
jbd_unlock_bh_state(bh);
spin_unlock(&journal->j_state_lock);
+ journal_put_journal_head(jh);
return ret;
} else {
/* The orphan record's transaction has
spin_unlock(&journal->j_list_lock);
jbd_unlock_bh_state(bh);
spin_unlock(&journal->j_state_lock);
+ journal_put_journal_head(jh);
return 0;
} else {
/* Good, the buffer belongs to the running transaction.
}
zap_buffer:
+ journal_put_journal_head(jh);
+zap_buffer_no_jh:
spin_unlock(&journal->j_list_lock);
jbd_unlock_bh_state(bh);
spin_unlock(&journal->j_state_lock);