Commit 2e710ff0 authored by Jan Kara's avatar Jan Kara Committed by Theodore Ts'o

jbd2: Don't call __bforget() unnecessarily

jbd2_journal_forget() jumps to 'not_jbd' branch which calls __bforget()
in cases where the buffer is clean which is pointless. In case of failed
assertion, it can be even argued that it is safer not to touch buffer's
dirty bits. Also logically it makes more sense to just jump to 'drop'
and that will make logic also simpler when we switch bh_state_lock to a
spinlock.
Signed-off-by: default avatarJan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20190809124233.13277-6-jack@suse.czSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent 6d69843e
...@@ -1550,7 +1550,7 @@ int jbd2_journal_forget (handle_t *handle, struct buffer_head *bh) ...@@ -1550,7 +1550,7 @@ int jbd2_journal_forget (handle_t *handle, struct buffer_head *bh)
if (!J_EXPECT_JH(jh, !jh->b_committed_data, if (!J_EXPECT_JH(jh, !jh->b_committed_data,
"inconsistent data on disk")) { "inconsistent data on disk")) {
err = -EIO; err = -EIO;
goto not_jbd; goto drop;
} }
/* keep track of whether or not this transaction modified us */ /* keep track of whether or not this transaction modified us */
...@@ -1640,7 +1640,7 @@ int jbd2_journal_forget (handle_t *handle, struct buffer_head *bh) ...@@ -1640,7 +1640,7 @@ int jbd2_journal_forget (handle_t *handle, struct buffer_head *bh)
if (!jh->b_cp_transaction) { if (!jh->b_cp_transaction) {
JBUFFER_TRACE(jh, "belongs to none transaction"); JBUFFER_TRACE(jh, "belongs to none transaction");
spin_unlock(&journal->j_list_lock); spin_unlock(&journal->j_list_lock);
goto not_jbd; goto drop;
} }
/* /*
...@@ -1650,7 +1650,7 @@ int jbd2_journal_forget (handle_t *handle, struct buffer_head *bh) ...@@ -1650,7 +1650,7 @@ int jbd2_journal_forget (handle_t *handle, struct buffer_head *bh)
if (!buffer_dirty(bh)) { if (!buffer_dirty(bh)) {
__jbd2_journal_remove_checkpoint(jh); __jbd2_journal_remove_checkpoint(jh);
spin_unlock(&journal->j_list_lock); spin_unlock(&journal->j_list_lock);
goto not_jbd; goto drop;
} }
/* /*
...@@ -1663,10 +1663,9 @@ int jbd2_journal_forget (handle_t *handle, struct buffer_head *bh) ...@@ -1663,10 +1663,9 @@ int jbd2_journal_forget (handle_t *handle, struct buffer_head *bh)
__jbd2_journal_file_buffer(jh, transaction, BJ_Forget); __jbd2_journal_file_buffer(jh, transaction, BJ_Forget);
spin_unlock(&journal->j_list_lock); spin_unlock(&journal->j_list_lock);
} }
drop:
jbd_unlock_bh_state(bh); jbd_unlock_bh_state(bh);
__brelse(bh); __brelse(bh);
drop:
if (drop_reserve) { if (drop_reserve) {
/* no need to reserve log space for this block -bzzz */ /* no need to reserve log space for this block -bzzz */
handle->h_buffer_credits++; handle->h_buffer_credits++;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment