diff options
Diffstat (limited to 'debian/patches-rt/0001-jbd2-Simplify-journal_unmap_buffer.patch')
-rw-r--r-- | debian/patches-rt/0001-jbd2-Simplify-journal_unmap_buffer.patch | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/debian/patches-rt/0001-jbd2-Simplify-journal_unmap_buffer.patch b/debian/patches-rt/0001-jbd2-Simplify-journal_unmap_buffer.patch new file mode 100644 index 000000000..e85118178 --- /dev/null +++ b/debian/patches-rt/0001-jbd2-Simplify-journal_unmap_buffer.patch @@ -0,0 +1,58 @@ +From: Thomas Gleixner <tglx@linutronix.de> +Date: Fri, 9 Aug 2019 14:42:27 +0200 +Subject: [PATCH 1/7] jbd2: Simplify journal_unmap_buffer() +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.4/older/patches-5.4.3-rt1.tar.xz + +journal_unmap_buffer() checks first whether the buffer head is a journal. +If so it takes locks and then invokes jbd2_journal_grab_journal_head() +followed by another check whether this is journal head buffer. + +The double checking is pointless. + +Replace the initial check with jbd2_journal_grab_journal_head() which +alredy checks whether the buffer head is actually a journal. + +Allows also early access to the journal head pointer for the upcoming +conversion of state lock to a regular spinlock. + +Signed-off-by: Thomas Gleixner <tglx@linutronix.de> +Reviewed-by: Jan Kara <jack@suse.cz> +Cc: linux-ext4@vger.kernel.org +Cc: "Theodore Ts'o" <tytso@mit.edu> +Signed-off-by: Jan Kara <jack@suse.cz> +Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> +--- + fs/jbd2/transaction.c | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +--- a/fs/jbd2/transaction.c ++++ b/fs/jbd2/transaction.c +@@ -2199,7 +2199,8 @@ static int journal_unmap_buffer(journal_ + * holding the page lock. --sct + */ + +- if (!buffer_jbd(bh)) ++ jh = jbd2_journal_grab_journal_head(bh); ++ if (!jh) + goto zap_buffer_unlocked; + + /* OK, we have data buffer in journaled mode */ +@@ -2207,10 +2208,6 @@ static int journal_unmap_buffer(journal_ + jbd_lock_bh_state(bh); + spin_lock(&journal->j_list_lock); + +- jh = jbd2_journal_grab_journal_head(bh); +- if (!jh) +- goto zap_buffer_no_jh; +- + /* + * We cannot remove the buffer from checkpoint lists until the + * transaction adding inode to orphan list (let's call it T) +@@ -2332,7 +2329,6 @@ static int journal_unmap_buffer(journal_ + */ + jh->b_modified = 0; + jbd2_journal_put_journal_head(jh); +-zap_buffer_no_jh: + spin_unlock(&journal->j_list_lock); + jbd_unlock_bh_state(bh); + write_unlock(&journal->j_state_lock); |