fs: ext4l: Add CRC32C implementation
Add ext4l_crc32c() which uses the Castagnoli polynomial (0x82F63B78) required for ext4 checksums. The table is initialised on first mount. Signed-off-by: Simon Glass <simon.glass@canonical.com>
This commit is contained in:
@@ -35,6 +35,7 @@
|
||||
#include <linux/iomap.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/rbtree.h> /* Real rbtree implementation */
|
||||
#include <u-boot/crc.h> /* For crc32() used by crc32_be */
|
||||
|
||||
/*
|
||||
* Override no_printk to avoid format warnings in disabled debug prints.
|
||||
@@ -2818,6 +2819,7 @@ struct wait_bit_entry {
|
||||
void free_buffer_head(struct buffer_head *bh);
|
||||
|
||||
/* ext4l support functions (support.c) */
|
||||
void ext4l_crc32c_init(void);
|
||||
void bh_cache_clear(void);
|
||||
int ext4l_read_block(sector_t block, size_t size, void *buffer);
|
||||
|
||||
|
||||
@@ -92,6 +92,8 @@ int ext4l_probe(struct blk_desc *fs_dev_desc,
|
||||
/* Set up block device for buffer I/O */
|
||||
ext4l_set_blk_dev(fs_dev_desc, fs_partition);
|
||||
|
||||
ext4l_crc32c_init();
|
||||
|
||||
/* Initialise journal subsystem if enabled */
|
||||
if (IS_ENABLED(CONFIG_EXT4_JOURNAL)) {
|
||||
ret = jbd2_journal_init_global();
|
||||
|
||||
@@ -12,12 +12,33 @@
|
||||
#include <blk.h>
|
||||
#include <part.h>
|
||||
#include <malloc.h>
|
||||
#include <u-boot/crc.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include "ext4_uboot.h"
|
||||
#include "ext4.h"
|
||||
|
||||
/*
|
||||
* CRC32C support - uses Castagnoli polynomial 0x82F63B78
|
||||
* Table is initialised on first mount
|
||||
*/
|
||||
static u32 ext4l_crc32c_table[256];
|
||||
static bool ext4l_crc32c_inited;
|
||||
|
||||
void ext4l_crc32c_init(void)
|
||||
{
|
||||
if (!ext4l_crc32c_inited) {
|
||||
crc32c_init(ext4l_crc32c_table, 0x82F63B78);
|
||||
ext4l_crc32c_inited = true;
|
||||
}
|
||||
}
|
||||
|
||||
u32 ext4l_crc32c(u32 crc, const void *address, unsigned int length)
|
||||
{
|
||||
return crc32c_cal(crc, address, length, ext4l_crc32c_table);
|
||||
}
|
||||
|
||||
/*
|
||||
* Buffer cache implementation
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user