mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 05:50:53 +07:00
jbd2: fix infinite loop when recovering corrupt journal blocks
When recovering the journal, don't fall into an infinite loop if we encounter a corrupt journal block. Instead, just skip the block and return an error, which fails the mount and thus forces the user to run a full filesystem fsck. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Cc: stable@vger.kernel.org
This commit is contained in:
parent
6603120e96
commit
022eaa7517
@ -426,6 +426,7 @@ static int do_one_pass(journal_t *journal,
|
||||
int tag_bytes = journal_tag_bytes(journal);
|
||||
__u32 crc32_sum = ~0; /* Transactional Checksums */
|
||||
int descr_csum_size = 0;
|
||||
int block_error = 0;
|
||||
|
||||
/*
|
||||
* First thing is to establish what we expect to find in the log
|
||||
@ -598,7 +599,8 @@ static int do_one_pass(journal_t *journal,
|
||||
"checksum recovering "
|
||||
"block %llu in log\n",
|
||||
blocknr);
|
||||
continue;
|
||||
block_error = 1;
|
||||
goto skip_write;
|
||||
}
|
||||
|
||||
/* Find a buffer for the new
|
||||
@ -797,7 +799,8 @@ static int do_one_pass(journal_t *journal,
|
||||
success = -EIO;
|
||||
}
|
||||
}
|
||||
|
||||
if (block_error && success == 0)
|
||||
success = -EIO;
|
||||
return success;
|
||||
|
||||
failed:
|
||||
|
Loading…
Reference in New Issue
Block a user