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 (!(ctx->options & E2F_OPT_READONLY) && uuid_is_null(sb->s_uuid)) {
|
||||||
if (fix_problem(ctx, PR_0_ADD_UUID, &pctx)) {
|
if (fix_problem(ctx, PR_0_ADD_UUID, &pctx)) {
|
||||||
uuid_generate(sb->s_uuid);
|
uuid_generate(sb->s_uuid);
|
||||||
|
ext2fs_init_csum_seed(fs);
|
||||||
fs->flags |= EXT2_FLAG_DIRTY;
|
fs->flags |= EXT2_FLAG_DIRTY;
|
||||||
fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
|
fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
|
||||||
}
|
}
|
||||||
|
|
|
@ -271,6 +271,9 @@ struct struct_ext2_filsys {
|
||||||
|
|
||||||
/* progress operation functions */
|
/* progress operation functions */
|
||||||
struct ext2fs_progress_ops *progress_ops;
|
struct ext2fs_progress_ops *progress_ops;
|
||||||
|
|
||||||
|
/* Precomputed FS UUID checksum for seeding other checksums */
|
||||||
|
__u32 csum_seed;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if EXT2_FLAT_INCLUDES
|
#if EXT2_FLAT_INCLUDES
|
||||||
|
@ -1431,6 +1434,7 @@ extern errcode_t ext2fs_write_bb_FILE(ext2_badblocks_list bb_list,
|
||||||
|
|
||||||
|
|
||||||
/* inline functions */
|
/* 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_mem(unsigned long size, void *ptr);
|
||||||
extern errcode_t ext2fs_get_memalign(unsigned long size,
|
extern errcode_t ext2fs_get_memalign(unsigned long size,
|
||||||
unsigned long align, void *ptr);
|
unsigned long align, void *ptr);
|
||||||
|
@ -1483,6 +1487,16 @@ extern int ext2fs_fstat(int fd, ext2fs_struct_stat *buf);
|
||||||
|
|
||||||
#ifndef EXT2_CUSTOM_MEMORY_ROUTINES
|
#ifndef EXT2_CUSTOM_MEMORY_ROUTINES
|
||||||
#include <string.h>
|
#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
|
* Allocate memory
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -315,6 +315,8 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
|
||||||
retval = EXT2_ET_CORRUPT_SUPERBLOCK;
|
retval = EXT2_ET_CORRUPT_SUPERBLOCK;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
/* Precompute the FS UUID to seed other checksums */
|
||||||
|
ext2fs_init_csum_seed(fs);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read group descriptors
|
* Read group descriptors
|
||||||
|
|
|
@ -2323,6 +2323,7 @@ int main (int argc, char *argv[])
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
uuid_generate(fs->super->s_uuid);
|
uuid_generate(fs->super->s_uuid);
|
||||||
|
ext2fs_init_csum_seed(fs);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the directory index variables
|
* Initialize the directory index variables
|
||||||
|
|
Loading…
Reference in New Issue