[Devel] [PATCH RHEL7 COMMIT] ms/jbd2: fix incorrect unlock on j_list_lock
Konstantin Khorenko
khorenko at virtuozzo.com
Thu Mar 16 04:42:20 PDT 2017
The commit is pushed to "branch-rh7-3.10.0-514.10.2.vz7.29.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-514.10.2.vz7.29.3
------>
commit 0672ec203b2c812f45694f2cc0a5121adf2ca4ec
Author: Taesoo Kim <tsgatesv at gmail.com>
Date: Thu Mar 16 15:42:20 2017 +0400
ms/jbd2: fix incorrect unlock on j_list_lock
When 'jh->b_transaction == transaction' (asserted by below)
J_ASSERT_JH(jh, (jh->b_transaction == transaction || ...
'journal->j_list_lock' will be incorrectly unlocked, since
the the lock is aquired only at the end of if / else-if
statements (missing the else case).
Signed-off-by: Taesoo Kim <tsgatesv at gmail.com>
Signed-off-by: Theodore Ts'o <tytso at mit.edu>
Reviewed-by: Andreas Dilger <adilger at dilger.ca>
Fixes: 6e4862a5bb9d12be87e4ea5d9a60836ebed71d28
Cc: stable at vger.kernel.org # 3.14+
ms commit: 559cce6 ("jbd2: fix incorrect unlock on j_list_lock")
Signed-off-by: Anatoly Stepanov <astepanov at cloudlinux.com>
---
fs/jbd2/transaction.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c
index b249f40..ed52bf7 100644
--- a/fs/jbd2/transaction.c
+++ b/fs/jbd2/transaction.c
@@ -1106,6 +1106,7 @@ int jbd2_journal_get_create_access(handle_t *handle, struct buffer_head *bh)
JBUFFER_TRACE(jh, "file as BJ_Reserved");
spin_lock(&journal->j_list_lock);
__jbd2_journal_file_buffer(jh, transaction, BJ_Reserved);
+ spin_unlock(&journal->j_list_lock);
} else if (jh->b_transaction == journal->j_committing_transaction) {
/* first access by this transaction */
jh->b_modified = 0;
@@ -1113,8 +1114,8 @@ int jbd2_journal_get_create_access(handle_t *handle, struct buffer_head *bh)
JBUFFER_TRACE(jh, "set next transaction");
spin_lock(&journal->j_list_lock);
jh->b_next_transaction = transaction;
+ spin_unlock(&journal->j_list_lock);
}
- spin_unlock(&journal->j_list_lock);
jbd_unlock_bh_state(bh);
/*
More information about the Devel
mailing list