jbd2: clean up checksum verification in do_one_pass()
Remove the unnecessary chksum_err and checksum_seen variables as well as some redundant code to make the function easier to understand. [ With changes suggested by jack@ and tytso@ ] Signed-off-by: Shijie Luo <luoshijie1@huawei.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Reviewed-by: Jan Kara <jack@suse.cz> Link: https://lore.kernel.org/r/20200819122955.33526-1-luoshijie1@huawei.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
70d7ced2ed
commit
00a3fff071
|
@ -690,14 +690,11 @@ static int do_one_pass(journal_t *journal,
|
|||
* number. */
|
||||
if (pass == PASS_SCAN &&
|
||||
jbd2_has_feature_checksum(journal)) {
|
||||
int chksum_err, chksum_seen;
|
||||
struct commit_header *cbh =
|
||||
(struct commit_header *)bh->b_data;
|
||||
unsigned found_chksum =
|
||||
be32_to_cpu(cbh->h_chksum[0]);
|
||||
|
||||
chksum_err = chksum_seen = 0;
|
||||
|
||||
if (info->end_transaction) {
|
||||
journal->j_failed_commit =
|
||||
info->end_transaction;
|
||||
|
@ -705,42 +702,23 @@ static int do_one_pass(journal_t *journal,
|
|||
break;
|
||||
}
|
||||
|
||||
if (crc32_sum == found_chksum &&
|
||||
cbh->h_chksum_type == JBD2_CRC32_CHKSUM &&
|
||||
cbh->h_chksum_size ==
|
||||
JBD2_CRC32_CHKSUM_SIZE)
|
||||
chksum_seen = 1;
|
||||
else if (!(cbh->h_chksum_type == 0 &&
|
||||
cbh->h_chksum_size == 0 &&
|
||||
found_chksum == 0 &&
|
||||
!chksum_seen))
|
||||
/*
|
||||
* If fs is mounted using an old kernel and then
|
||||
* kernel with journal_chksum is used then we
|
||||
* get a situation where the journal flag has
|
||||
* checksum flag set but checksums are not
|
||||
* present i.e chksum = 0, in the individual
|
||||
* commit blocks.
|
||||
* Hence to avoid checksum failures, in this
|
||||
* situation, this extra check is added.
|
||||
*/
|
||||
chksum_err = 1;
|
||||
/* Neither checksum match nor unused? */
|
||||
if (!((crc32_sum == found_chksum &&
|
||||
cbh->h_chksum_type ==
|
||||
JBD2_CRC32_CHKSUM &&
|
||||
cbh->h_chksum_size ==
|
||||
JBD2_CRC32_CHKSUM_SIZE) ||
|
||||
(cbh->h_chksum_type == 0 &&
|
||||
cbh->h_chksum_size == 0 &&
|
||||
found_chksum == 0)))
|
||||
goto chksum_error;
|
||||
|
||||
if (chksum_err) {
|
||||
info->end_transaction = next_commit_ID;
|
||||
|
||||
if (!jbd2_has_feature_async_commit(journal)) {
|
||||
journal->j_failed_commit =
|
||||
next_commit_ID;
|
||||
brelse(bh);
|
||||
break;
|
||||
}
|
||||
}
|
||||
crc32_sum = ~0;
|
||||
}
|
||||
if (pass == PASS_SCAN &&
|
||||
!jbd2_commit_block_csum_verify(journal,
|
||||
bh->b_data)) {
|
||||
chksum_error:
|
||||
info->end_transaction = next_commit_ID;
|
||||
|
||||
if (!jbd2_has_feature_async_commit(journal)) {
|
||||
|
|
Loading…
Reference in New Issue