Commit c460e5ed authored by Harshad Shirwadkar's avatar Harshad Shirwadkar Committed by Theodore Ts'o
Browse files

jbd2: don't use state lock during commit path



Variables journal->j_fc_off, journal->j_fc_wbuf are accessed during
commit path. Since today we allow only one process to perform a fast
commit, there is no need take state lock before accessing these
variables. This patch removes these locks and adds comments to
describe this.

Suggested-by: default avatarJan Kara <jack@suse.cz>
Signed-off-by: default avatarHarshad Shirwadkar <harshadshirwadkar@gmail.com>
Link: https://lore.kernel.org/r/20201106035911.1942128-9-harshadshirwadkar@gmail.com


Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent 37e0a30e
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -865,7 +865,6 @@ int jbd2_fc_get_buf(journal_t *journal, struct buffer_head **bh_out)
	int fc_off;

	*bh_out = NULL;
	write_lock(&journal->j_state_lock);

	if (journal->j_fc_off + journal->j_fc_first < journal->j_fc_last) {
		fc_off = journal->j_fc_off;
@@ -874,7 +873,6 @@ int jbd2_fc_get_buf(journal_t *journal, struct buffer_head **bh_out)
	} else {
		ret = -EINVAL;
	}
	write_unlock(&journal->j_state_lock);

	if (ret)
		return ret;
@@ -909,9 +907,7 @@ int jbd2_fc_wait_bufs(journal_t *journal, int num_blks)
	struct buffer_head *bh;
	int i, j_fc_off;

	read_lock(&journal->j_state_lock);
	j_fc_off = journal->j_fc_off;
	read_unlock(&journal->j_state_lock);

	/*
	 * Wait in reverse order to minimize chances of us being woken up before
@@ -939,9 +935,7 @@ int jbd2_fc_release_bufs(journal_t *journal)
	struct buffer_head *bh;
	int i, j_fc_off;

	read_lock(&journal->j_state_lock);
	j_fc_off = journal->j_fc_off;
	read_unlock(&journal->j_state_lock);

	/*
	 * Wait in reverse order to minimize chances of us being woken up before
+6 −4
Original line number Diff line number Diff line
@@ -945,8 +945,9 @@ struct journal_s
	/**
	 * @j_fc_off:
	 *
	 * Number of fast commit blocks currently allocated.
	 * [j_state_lock].
	 * Number of fast commit blocks currently allocated. Accessed only
	 * during fast commit. Currently only process can do fast commit, so
	 * this field is not protected by any lock.
	 */
	unsigned long		j_fc_off;

@@ -1109,8 +1110,9 @@ struct journal_s
	struct buffer_head	**j_wbuf;

	/**
	 * @j_fc_wbuf: Array of fast commit bhs for
	 * jbd2_journal_commit_transaction.
	 * @j_fc_wbuf: Array of fast commit bhs for fast commit. Accessed only
	 * during a fast commit. Currently only process can do fast commit, so
	 * this field is not protected by any lock.
	 */
	struct buffer_head	**j_fc_wbuf;