mirror of https://github.com/vitalif/e2fsprogs
libext2fs: precompute FS UUID checksum seed
Precompute the FS UUID checksum seed that is used for all metadata checksumming operations and store it in ext2_filsys. Signed-off-by: Darrick J. Wong <djwong@us.ibm.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>pu
parent
9bca9a39b7
commit
4ffbe3afa9
|
@ -716,6 +716,7 @@ void check_super_block(e2fsck_t ctx)
|
|||
if (!(ctx->options & E2F_OPT_READONLY) && uuid_is_null(sb->s_uuid)) {
|
||||
if (fix_problem(ctx, PR_0_ADD_UUID, &pctx)) {
|
||||
uuid_generate(sb->s_uuid);
|
||||
ext2fs_init_csum_seed(fs);
|
||||
fs->flags |= EXT2_FLAG_DIRTY;
|
||||
fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
|
||||
}
|
||||
|
|
|
@ -271,6 +271,9 @@ struct struct_ext2_filsys {
|
|||
|
||||
/* progress operation functions */
|
||||
struct ext2fs_progress_ops *progress_ops;
|
||||
|
||||
/* Precomputed FS UUID checksum for seeding other checksums */
|
||||
__u32 csum_seed;
|
||||
};
|
||||
|
||||
#if EXT2_FLAT_INCLUDES
|
||||
|
@ -1431,6 +1434,7 @@ extern errcode_t ext2fs_write_bb_FILE(ext2_badblocks_list bb_list,
|
|||
|
||||
|
||||
/* inline functions */
|
||||
extern void ext2fs_init_csum_seed(ext2_filsys fs);
|
||||
extern errcode_t ext2fs_get_mem(unsigned long size, void *ptr);
|
||||
extern errcode_t ext2fs_get_memalign(unsigned long size,
|
||||
unsigned long align, void *ptr);
|
||||
|
@ -1483,6 +1487,16 @@ extern int ext2fs_fstat(int fd, ext2fs_struct_stat *buf);
|
|||
|
||||
#ifndef EXT2_CUSTOM_MEMORY_ROUTINES
|
||||
#include <string.h>
|
||||
_INLINE_ void ext2fs_init_csum_seed(ext2_filsys fs)
|
||||
{
|
||||
if (!EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
|
||||
EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
|
||||
return;
|
||||
|
||||
fs->csum_seed = ext2fs_crc32c_le(~0, fs->super->s_uuid,
|
||||
sizeof(fs->super->s_uuid));
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate memory
|
||||
*/
|
||||
|
|
|
@ -315,6 +315,8 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
|
|||
retval = EXT2_ET_CORRUPT_SUPERBLOCK;
|
||||
goto cleanup;
|
||||
}
|
||||
/* Precompute the FS UUID to seed other checksums */
|
||||
ext2fs_init_csum_seed(fs);
|
||||
|
||||
/*
|
||||
* Read group descriptors
|
||||
|
|
|
@ -2323,6 +2323,7 @@ int main (int argc, char *argv[])
|
|||
}
|
||||
} else
|
||||
uuid_generate(fs->super->s_uuid);
|
||||
ext2fs_init_csum_seed(fs);
|
||||
|
||||
/*
|
||||
* Initialize the directory index variables
|
||||
|
|
Loading…
Reference in New Issue