mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
jbd2: Grab a reference to the crc32c driver if necessary
Obtain a reference to the crc32c driver if needed for the v2 checksum. Signed-off-by: Darrick J. Wong <[email protected]> Signed-off-by: "Theodore Ts'o" <[email protected]>
This commit is contained in:
parent
25ed6e8a54
commit
01b5adcebb
3 changed files with 50 additions and 0 deletions
|
|
@ -1,6 +1,8 @@
|
|||
config JBD2
|
||||
tristate
|
||||
select CRC32
|
||||
select CRYPTO
|
||||
select CRYPTO_CRC32C
|
||||
help
|
||||
This is a generic journaling layer for block devices that support
|
||||
both 32-bit and 64-bit block numbers. It is currently used by
|
||||
|
|
|
|||
|
|
@ -1438,6 +1438,17 @@ static int journal_get_superblock(journal_t *journal)
|
|||
goto out;
|
||||
}
|
||||
|
||||
/* Load the checksum driver */
|
||||
if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_CSUM_V2)) {
|
||||
journal->j_chksum_driver = crypto_alloc_shash("crc32c", 0, 0);
|
||||
if (IS_ERR(journal->j_chksum_driver)) {
|
||||
printk(KERN_ERR "JBD: Cannot load crc32c driver.\n");
|
||||
err = PTR_ERR(journal->j_chksum_driver);
|
||||
journal->j_chksum_driver = NULL;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
set_buffer_verified(bh);
|
||||
|
||||
return 0;
|
||||
|
|
@ -1591,6 +1602,8 @@ int jbd2_journal_destroy(journal_t *journal)
|
|||
iput(journal->j_inode);
|
||||
if (journal->j_revoke)
|
||||
jbd2_journal_destroy_revoke(journal);
|
||||
if (journal->j_chksum_driver)
|
||||
crypto_free_shash(journal->j_chksum_driver);
|
||||
kfree(journal->j_wbuf);
|
||||
kfree(journal);
|
||||
|
||||
|
|
@ -1707,6 +1720,18 @@ int jbd2_journal_set_features (journal_t *journal, unsigned long compat,
|
|||
sb->s_checksum_type = JBD2_CRC32C_CHKSUM;
|
||||
sb->s_feature_compat &=
|
||||
~cpu_to_be32(JBD2_FEATURE_COMPAT_CHECKSUM);
|
||||
|
||||
/* Load the checksum driver */
|
||||
if (journal->j_chksum_driver == NULL) {
|
||||
journal->j_chksum_driver = crypto_alloc_shash("crc32c",
|
||||
0, 0);
|
||||
if (IS_ERR(journal->j_chksum_driver)) {
|
||||
printk(KERN_ERR "JBD: Cannot load crc32c "
|
||||
"driver.\n");
|
||||
journal->j_chksum_driver = NULL;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* If enabling v1 checksums, downgrade superblock */
|
||||
|
|
|
|||
Loading…
Reference in a new issue