summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0001-jbd2-Simplify-journal_unmap_buffer.patch
diff options
context:
space:
mode:
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.patch58
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);