summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0005-jbd2-Don-t-call-__bforget-unnecessarily.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/0005-jbd2-Don-t-call-__bforget-unnecessarily.patch')
-rw-r--r--debian/patches-rt/0005-jbd2-Don-t-call-__bforget-unnecessarily.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/debian/patches-rt/0005-jbd2-Don-t-call-__bforget-unnecessarily.patch b/debian/patches-rt/0005-jbd2-Don-t-call-__bforget-unnecessarily.patch
new file mode 100644
index 000000000..ebd16e255
--- /dev/null
+++ b/debian/patches-rt/0005-jbd2-Don-t-call-__bforget-unnecessarily.patch
@@ -0,0 +1,59 @@
+From: Jan Kara <jack@suse.cz>
+Date: Fri, 9 Aug 2019 14:42:31 +0200
+Subject: [PATCH 5/7] jbd2: Don't call __bforget() unnecessarily
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.4/older/patches-5.4.3-rt1.tar.xz
+
+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: Jan Kara <jack@suse.cz>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ fs/jbd2/transaction.c | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+--- a/fs/jbd2/transaction.c
++++ b/fs/jbd2/transaction.c
+@@ -1550,7 +1550,7 @@ int jbd2_journal_forget (handle_t *handl
+ if (!J_EXPECT_JH(jh, !jh->b_committed_data,
+ "inconsistent data on disk")) {
+ err = -EIO;
+- goto not_jbd;
++ goto drop;
+ }
+
+ /* keep track of whether or not this transaction modified us */
+@@ -1640,7 +1640,7 @@ int jbd2_journal_forget (handle_t *handl
+ if (!jh->b_cp_transaction) {
+ JBUFFER_TRACE(jh, "belongs to none transaction");
+ spin_unlock(&journal->j_list_lock);
+- goto not_jbd;
++ goto drop;
+ }
+
+ /*
+@@ -1650,7 +1650,7 @@ int jbd2_journal_forget (handle_t *handl
+ if (!buffer_dirty(bh)) {
+ __jbd2_journal_remove_checkpoint(jh);
+ spin_unlock(&journal->j_list_lock);
+- goto not_jbd;
++ goto drop;
+ }
+
+ /*
+@@ -1663,10 +1663,9 @@ int jbd2_journal_forget (handle_t *handl
+ __jbd2_journal_file_buffer(jh, transaction, BJ_Forget);
+ spin_unlock(&journal->j_list_lock);
+ }
+-
++drop:
+ jbd_unlock_bh_state(bh);
+ __brelse(bh);
+-drop:
+ if (drop_reserve) {
+ /* no need to reserve log space for this block -bzzz */
+ handle->h_buffer_credits++;