Lines Matching refs:fs
33 void ext2fs_init_csum_seed(ext2_filsys fs) in ext2fs_init_csum_seed() argument
35 if (ext2fs_has_feature_csum_seed(fs->super)) in ext2fs_init_csum_seed()
36 fs->csum_seed = fs->super->s_checksum_seed; in ext2fs_init_csum_seed()
37 else if (ext2fs_has_feature_metadata_csum(fs->super) || in ext2fs_init_csum_seed()
38 ext2fs_has_feature_ea_inode(fs->super)) in ext2fs_init_csum_seed()
39 fs->csum_seed = ext2fs_crc32c_le(~0, fs->super->s_uuid, in ext2fs_init_csum_seed()
40 sizeof(fs->super->s_uuid)); in ext2fs_init_csum_seed()
43 static __u32 ext2fs_mmp_csum(ext2_filsys fs, struct mmp_struct *mmp) in ext2fs_mmp_csum() argument
47 return ext2fs_crc32c_le(fs->csum_seed, (unsigned char *)mmp, offset); in ext2fs_mmp_csum()
50 int ext2fs_mmp_csum_verify(ext2_filsys fs, struct mmp_struct *mmp) in ext2fs_mmp_csum_verify() argument
54 if (!ext2fs_has_feature_metadata_csum(fs->super)) in ext2fs_mmp_csum_verify()
57 calculated = ext2fs_mmp_csum(fs, mmp); in ext2fs_mmp_csum_verify()
62 errcode_t ext2fs_mmp_csum_set(ext2_filsys fs, struct mmp_struct *mmp) in ext2fs_mmp_csum_set() argument
66 if (!ext2fs_has_feature_metadata_csum(fs->super)) in ext2fs_mmp_csum_set()
69 crc = ext2fs_mmp_csum(fs, mmp); in ext2fs_mmp_csum_set()
75 int ext2fs_verify_csum_type(ext2_filsys fs, struct ext2_super_block *sb) in ext2fs_verify_csum_type() argument
77 if (!ext2fs_has_feature_metadata_csum(fs->super)) in ext2fs_verify_csum_type()
83 static __u32 ext2fs_superblock_csum(ext2_filsys fs EXT2FS_ATTR((unused)), in ext2fs_superblock_csum()
92 int ext2fs_superblock_csum_verify(ext2_filsys fs, struct ext2_super_block *sb) in ext2fs_superblock_csum_verify() argument
96 if (fs->flags & EXT2_FLAG_SWAP_BYTES) in ext2fs_superblock_csum_verify()
101 if (!EXT2_HAS_RO_COMPAT_FEATURE(fs->super, flag)) in ext2fs_superblock_csum_verify()
104 calculated = ext2fs_superblock_csum(fs, sb); in ext2fs_superblock_csum_verify()
110 errcode_t ext2fs_superblock_csum_set(ext2_filsys fs, in ext2fs_superblock_csum_set() argument
115 if (fs->flags & EXT2_FLAG_SWAP_BYTES) in ext2fs_superblock_csum_set()
120 if (!EXT2_HAS_RO_COMPAT_FEATURE(fs->super, flag)) in ext2fs_superblock_csum_set()
123 crc = ext2fs_superblock_csum(fs, sb); in ext2fs_superblock_csum_set()
129 static errcode_t ext2fs_ext_attr_block_csum(ext2_filsys fs, in ext2fs_ext_attr_block_csum() argument
140 *crc = ext2fs_crc32c_le(fs->csum_seed, (unsigned char *)&block, in ext2fs_ext_attr_block_csum()
142 *crc = ext2fs_crc32c_le(*crc, (unsigned char *)buf, fs->blocksize); in ext2fs_ext_attr_block_csum()
148 int ext2fs_ext_attr_block_csum_verify(ext2_filsys fs, ext2_ino_t inum, in ext2fs_ext_attr_block_csum_verify() argument
155 if (!ext2fs_has_feature_metadata_csum(fs->super)) in ext2fs_ext_attr_block_csum_verify()
158 retval = ext2fs_ext_attr_block_csum(fs, inum, block, hdr, &calculated); in ext2fs_ext_attr_block_csum_verify()
165 errcode_t ext2fs_ext_attr_block_csum_set(ext2_filsys fs, ext2_ino_t inum, in ext2fs_ext_attr_block_csum_set() argument
172 if (!ext2fs_has_feature_metadata_csum(fs->super)) in ext2fs_ext_attr_block_csum_set()
175 retval = ext2fs_ext_attr_block_csum(fs, inum, block, hdr, &crc); in ext2fs_ext_attr_block_csum_set()
192 static errcode_t __get_dx_countlimit(ext2_filsys fs, in __get_dx_countlimit() argument
207 if (rec_len == fs->blocksize && translate(dirent->name_len) == 0) in __get_dx_countlimit()
212 if (rec_len != fs->blocksize - 12) in __get_dx_countlimit()
223 max_sane_entries = (fs->blocksize - count_offset) / in __get_dx_countlimit()
237 errcode_t ext2fs_get_dx_countlimit(ext2_filsys fs, in ext2fs_get_dx_countlimit() argument
242 return __get_dx_countlimit(fs, dirent, cc, offset, 0); in ext2fs_get_dx_countlimit()
245 void ext2fs_initialize_dirent_tail(ext2_filsys fs, in ext2fs_initialize_dirent_tail() argument
249 ext2fs_set_rec_len(fs, sizeof(struct ext2_dir_entry_tail), in ext2fs_initialize_dirent_tail()
254 static errcode_t __get_dirent_tail(ext2_filsys fs, in __get_dirent_tail() argument
266 if (fs->blocksize < 1024) in __get_dirent_tail()
270 top = EXT2_DIRENT_TAIL(dirent, fs->blocksize); in __get_dirent_tail()
279 if ((char *)d > ((char *)dirent + fs->blocksize)) in __get_dirent_tail()
295 int ext2fs_dirent_has_tail(ext2_filsys fs, struct ext2_dir_entry *dirent) in ext2fs_dirent_has_tail() argument
297 return __get_dirent_tail(fs, dirent, NULL, 0) != in ext2fs_dirent_has_tail()
301 static errcode_t ext2fs_dirent_csum(ext2_filsys fs, ext2_ino_t inum, in ext2fs_dirent_csum() argument
310 retval = ext2fs_read_inode(fs, inum, &inode); in ext2fs_dirent_csum()
316 *crc = ext2fs_crc32c_le(fs->csum_seed, (unsigned char *)&inum, in ext2fs_dirent_csum()
324 int ext2fs_dirent_csum_verify(ext2_filsys fs, ext2_ino_t inum, in ext2fs_dirent_csum_verify() argument
331 retval = __get_dirent_tail(fs, dirent, &t, 1); in ext2fs_dirent_csum_verify()
339 retval = ext2fs_dirent_csum(fs, inum, dirent, &calculated, in ext2fs_dirent_csum_verify()
346 static errcode_t ext2fs_dirent_csum_set(ext2_filsys fs, ext2_ino_t inum, in ext2fs_dirent_csum_set() argument
353 retval = __get_dirent_tail(fs, dirent, &t, 1); in ext2fs_dirent_csum_set()
358 retval = ext2fs_dirent_csum(fs, inum, dirent, &crc, in ext2fs_dirent_csum_set()
366 errcode_t ext2fs_dx_csum(ext2_filsys fs, ext2_ino_t inum, in ext2fs_dx_csum() argument
379 retval = __get_dx_countlimit(fs, dirent, &c, &count_offset, 1); in ext2fs_dx_csum()
385 fs->blocksize - sizeof(struct ext2_dx_tail)) in ext2fs_dx_csum()
392 retval = ext2fs_read_inode(fs, inum, &inode); in ext2fs_dx_csum()
398 *crc = ext2fs_crc32c_le(fs->csum_seed, (unsigned char *)&inum, in ext2fs_dx_csum()
410 static int ext2fs_dx_csum_verify(ext2_filsys fs, ext2_ino_t inum, in ext2fs_dx_csum_verify() argument
417 retval = ext2fs_dx_csum(fs, inum, dirent, &calculated, &t); in ext2fs_dx_csum_verify()
424 static errcode_t ext2fs_dx_csum_set(ext2_filsys fs, ext2_ino_t inum, in ext2fs_dx_csum_set() argument
431 retval = ext2fs_dx_csum(fs, inum, dirent, &crc, &t); in ext2fs_dx_csum_set()
438 int ext2fs_dir_block_csum_verify(ext2_filsys fs, ext2_ino_t inum, in ext2fs_dir_block_csum_verify() argument
441 if (!ext2fs_has_feature_metadata_csum(fs->super)) in ext2fs_dir_block_csum_verify()
444 if (__get_dirent_tail(fs, dirent, NULL, 1) == 0) in ext2fs_dir_block_csum_verify()
445 return ext2fs_dirent_csum_verify(fs, inum, dirent); in ext2fs_dir_block_csum_verify()
446 if (__get_dx_countlimit(fs, dirent, NULL, NULL, 1) == 0) in ext2fs_dir_block_csum_verify()
447 return ext2fs_dx_csum_verify(fs, inum, dirent); in ext2fs_dir_block_csum_verify()
452 errcode_t ext2fs_dir_block_csum_set(ext2_filsys fs, ext2_ino_t inum, in ext2fs_dir_block_csum_set() argument
455 if (!ext2fs_has_feature_metadata_csum(fs->super)) in ext2fs_dir_block_csum_set()
458 if (__get_dirent_tail(fs, dirent, NULL, 1) == 0) in ext2fs_dir_block_csum_set()
459 return ext2fs_dirent_csum_set(fs, inum, dirent); in ext2fs_dir_block_csum_set()
460 if (__get_dx_countlimit(fs, dirent, NULL, NULL, 1) == 0) in ext2fs_dir_block_csum_set()
461 return ext2fs_dx_csum_set(fs, inum, dirent); in ext2fs_dir_block_csum_set()
463 if (fs->flags & EXT2_FLAG_IGNORE_CSUM_ERRORS) in ext2fs_dir_block_csum_set()
477 static errcode_t ext2fs_extent_block_csum(ext2_filsys fs, ext2_ino_t inum, in ext2fs_extent_block_csum() argument
489 retval = ext2fs_read_inode(fs, inum, &inode); in ext2fs_extent_block_csum()
494 *crc = ext2fs_crc32c_le(fs->csum_seed, (unsigned char *)&inum, in ext2fs_extent_block_csum()
502 int ext2fs_extent_block_csum_verify(ext2_filsys fs, ext2_ino_t inum, in ext2fs_extent_block_csum_verify() argument
513 if (!ext2fs_has_feature_metadata_csum(fs->super)) in ext2fs_extent_block_csum_verify()
517 retval = ext2fs_extent_block_csum(fs, inum, eh, &calculated); in ext2fs_extent_block_csum_verify()
524 errcode_t ext2fs_extent_block_csum_set(ext2_filsys fs, ext2_ino_t inum, in ext2fs_extent_block_csum_set() argument
531 if (!ext2fs_has_feature_metadata_csum(fs->super)) in ext2fs_extent_block_csum_set()
538 retval = ext2fs_extent_block_csum(fs, inum, eh, &crc); in ext2fs_extent_block_csum_set()
545 int ext2fs_inode_bitmap_csum_verify(ext2_filsys fs, dgrp_t group, in ext2fs_inode_bitmap_csum_verify() argument
549 ext2fs_group_desc(fs, fs->group_desc, group); in ext2fs_inode_bitmap_csum_verify()
552 if (!ext2fs_has_feature_metadata_csum(fs->super)) in ext2fs_inode_bitmap_csum_verify()
555 calculated = ext2fs_crc32c_le(fs->csum_seed, (unsigned char *)bitmap, in ext2fs_inode_bitmap_csum_verify()
557 if (EXT2_DESC_SIZE(fs->super) >= EXT4_BG_INODE_BITMAP_CSUM_HI_END) in ext2fs_inode_bitmap_csum_verify()
565 errcode_t ext2fs_inode_bitmap_csum_set(ext2_filsys fs, dgrp_t group, in ext2fs_inode_bitmap_csum_set() argument
570 ext2fs_group_desc(fs, fs->group_desc, group); in ext2fs_inode_bitmap_csum_set()
572 if (!ext2fs_has_feature_metadata_csum(fs->super)) in ext2fs_inode_bitmap_csum_set()
575 crc = ext2fs_crc32c_le(fs->csum_seed, (unsigned char *)bitmap, size); in ext2fs_inode_bitmap_csum_set()
577 if (EXT2_DESC_SIZE(fs->super) >= EXT4_BG_INODE_BITMAP_CSUM_HI_END) in ext2fs_inode_bitmap_csum_set()
583 int ext2fs_block_bitmap_csum_verify(ext2_filsys fs, dgrp_t group, in ext2fs_block_bitmap_csum_verify() argument
587 ext2fs_group_desc(fs, fs->group_desc, group); in ext2fs_block_bitmap_csum_verify()
590 if (!ext2fs_has_feature_metadata_csum(fs->super)) in ext2fs_block_bitmap_csum_verify()
593 calculated = ext2fs_crc32c_le(fs->csum_seed, (unsigned char *)bitmap, in ext2fs_block_bitmap_csum_verify()
595 if (EXT2_DESC_SIZE(fs->super) >= EXT4_BG_BLOCK_BITMAP_CSUM_HI_LOCATION) in ext2fs_block_bitmap_csum_verify()
603 errcode_t ext2fs_block_bitmap_csum_set(ext2_filsys fs, dgrp_t group, in ext2fs_block_bitmap_csum_set() argument
608 ext2fs_group_desc(fs, fs->group_desc, group); in ext2fs_block_bitmap_csum_set()
610 if (!ext2fs_has_feature_metadata_csum(fs->super)) in ext2fs_block_bitmap_csum_set()
613 crc = ext2fs_crc32c_le(fs->csum_seed, (unsigned char *)bitmap, size); in ext2fs_block_bitmap_csum_set()
615 if (EXT2_DESC_SIZE(fs->super) >= EXT4_BG_BLOCK_BITMAP_CSUM_HI_LOCATION) in ext2fs_block_bitmap_csum_set()
621 static errcode_t ext2fs_inode_csum(ext2_filsys fs, ext2_ino_t inum, in ext2fs_inode_csum() argument
627 size_t size = EXT2_INODE_SIZE(fs->super); in ext2fs_inode_csum()
640 *crc = ext2fs_crc32c_le(fs->csum_seed, (unsigned char *)&inum, in ext2fs_inode_csum()
651 int ext2fs_inode_csum_verify(ext2_filsys fs, ext2_ino_t inum, in ext2fs_inode_csum_verify() argument
659 if (!ext2fs_has_feature_metadata_csum(fs->super)) in ext2fs_inode_csum_verify()
662 has_hi = (EXT2_INODE_SIZE(fs->super) > EXT2_GOOD_OLD_INODE_SIZE && in ext2fs_inode_csum_verify()
666 retval = ext2fs_inode_csum(fs, inum, inode, &calculated, has_hi); in ext2fs_inode_csum_verify()
694 errcode_t ext2fs_inode_csum_set(ext2_filsys fs, ext2_ino_t inum, in ext2fs_inode_csum_set() argument
701 if (!ext2fs_has_feature_metadata_csum(fs->super)) in ext2fs_inode_csum_set()
704 has_hi = (EXT2_INODE_SIZE(fs->super) > EXT2_GOOD_OLD_INODE_SIZE && in ext2fs_inode_csum_set()
707 retval = ext2fs_inode_csum(fs, inum, inode, &crc, has_hi); in ext2fs_inode_csum_set()
716 __u16 ext2fs_group_desc_csum(ext2_filsys fs, dgrp_t group) in ext2fs_group_desc_csum() argument
718 struct ext2_group_desc *desc = ext2fs_group_desc(fs, fs->group_desc, in ext2fs_group_desc_csum()
720 size_t offset, size = EXT2_DESC_SIZE(fs->super); in ext2fs_group_desc_csum()
732 ext2fs_swap_group_desc2(fs, (struct ext2_group_desc *) &swabdesc); in ext2fs_group_desc_csum()
737 if (ext2fs_has_feature_metadata_csum(fs->super)) { in ext2fs_group_desc_csum()
744 crc32 = ext2fs_crc32c_le(fs->csum_seed, (unsigned char *)&group, in ext2fs_group_desc_csum()
761 crc = ext2fs_crc16(~0, fs->super->s_uuid, in ext2fs_group_desc_csum()
762 sizeof(fs->super->s_uuid)); in ext2fs_group_desc_csum()
786 int ext2fs_group_desc_csum_verify(ext2_filsys fs, dgrp_t group) in ext2fs_group_desc_csum_verify() argument
788 if (ext2fs_has_group_desc_csum(fs) && in ext2fs_group_desc_csum_verify()
789 (ext2fs_bg_checksum(fs, group) != in ext2fs_group_desc_csum_verify()
790 ext2fs_group_desc_csum(fs, group))) in ext2fs_group_desc_csum_verify()
796 void ext2fs_group_desc_csum_set(ext2_filsys fs, dgrp_t group) in ext2fs_group_desc_csum_set() argument
798 if (!ext2fs_has_group_desc_csum(fs)) in ext2fs_group_desc_csum_set()
803 ext2fs_bg_checksum_set(fs, group, ext2fs_group_desc_csum(fs, group)); in ext2fs_group_desc_csum_set()
823 errcode_t ext2fs_set_gdt_csum(ext2_filsys fs) in ext2fs_set_gdt_csum() argument
825 struct ext2_super_block *sb = fs->super; in ext2fs_set_gdt_csum()
829 if (!fs->inode_map) in ext2fs_set_gdt_csum()
832 if (!ext2fs_has_group_desc_csum(fs)) in ext2fs_set_gdt_csum()
835 for (i = 0; i < fs->group_desc_count; i++) { in ext2fs_set_gdt_csum()
836 __u32 old_csum = ext2fs_bg_checksum(fs, i); in ext2fs_set_gdt_csum()
837 __u32 old_unused = ext2fs_bg_itable_unused(fs, i); in ext2fs_set_gdt_csum()
838 __u32 old_flags = ext2fs_bg_flags(fs, i); in ext2fs_set_gdt_csum()
839 __u32 old_free_inodes_count = ext2fs_bg_free_inodes_count(fs, i); in ext2fs_set_gdt_csum()
840 __u32 old_free_blocks_count = ext2fs_bg_free_blocks_count(fs, i); in ext2fs_set_gdt_csum()
843 i != fs->group_desc_count - 1) in ext2fs_set_gdt_csum()
844 ext2fs_bg_flags_set(fs, i, EXT2_BG_BLOCK_UNINIT); in ext2fs_set_gdt_csum()
847 ext2fs_bg_flags_set(fs, i, EXT2_BG_INODE_UNINIT); in ext2fs_set_gdt_csum()
848 ext2fs_bg_itable_unused_set(fs, i, sb->s_inodes_per_group); in ext2fs_set_gdt_csum()
852 find_last_inode_ingrp(fs->inode_map, in ext2fs_set_gdt_csum()
855 ext2fs_bg_flags_clear(fs, i, EXT2_BG_INODE_UNINIT); in ext2fs_set_gdt_csum()
856 ext2fs_bg_itable_unused_set(fs, i, unused); in ext2fs_set_gdt_csum()
859 ext2fs_group_desc_csum_set(fs, i); in ext2fs_set_gdt_csum()
860 if (old_flags != ext2fs_bg_flags(fs, i)) in ext2fs_set_gdt_csum()
862 if (old_unused != ext2fs_bg_itable_unused(fs, i)) in ext2fs_set_gdt_csum()
864 if (old_csum != ext2fs_bg_checksum(fs, i)) in ext2fs_set_gdt_csum()
868 ext2fs_mark_super_dirty(fs); in ext2fs_set_gdt_csum()
875 void print_csum(const char *msg, ext2_filsys fs, dgrp_t group) in print_csum() argument
879 struct ext2_group_desc *desc = ext2fs_group_desc(fs, fs->group_desc, in print_csum()
881 size_t size = EXT2_DESC_SIZE(fs->super); in print_csum()
882 struct ext2_super_block *sb = fs->super; in print_csum()
896 ext2fs_swap_group_desc2(fs, (struct ext2_group_desc *) &swabdesc); in print_csum()
904 crc1 = ext2fs_crc16(~0, sb->s_uuid, sizeof(fs->super->s_uuid)); in print_csum()
919 ext2fs_group_desc_csum(fs, group)); in print_csum()
929 ext2_filsys fs; in main() local
942 test_io_manager, &fs); in main()
948 memcpy(fs->super->s_uuid, sb_uuid, 16); in main()
949 fs->super->s_feature_ro_compat = EXT4_FEATURE_RO_COMPAT_GDT_CSUM; in main()
951 for (i=0; i < fs->group_desc_count; i++) { in main()
952 ext2fs_block_bitmap_loc_set(fs, i, 124); in main()
953 ext2fs_inode_bitmap_loc_set(fs, i, 125); in main()
954 ext2fs_inode_table_loc_set(fs, i, 126); in main()
955 ext2fs_bg_free_blocks_count_set(fs, i, 31119); in main()
956 ext2fs_bg_free_inodes_count_set(fs, i, 15701); in main()
957 ext2fs_bg_used_dirs_count_set(fs, i, 2); in main()
958 ext2fs_bg_flags_zap(fs, i); in main()
961 csum1 = ext2fs_group_desc_csum(fs, 0); in main()
962 print_csum("csum0000", fs, 0); in main()
968 csum2 = ext2fs_group_desc_csum(fs, 1); in main()
969 print_csum("csum0001", fs, 1); in main()
974 csum2 = ext2fs_group_desc_csum(fs, 2); in main()
975 print_csum("csumffff", fs, 2); in main()
980 ext2fs_bg_checksum_set(fs, 0, csum1); in main()
981 csum2 = ext2fs_group_desc_csum(fs, 0); in main()
982 print_csum("csum_set", fs, 0); in main()
987 if (!ext2fs_group_desc_csum_verify(fs, 0)) { in main()
991 memset(fs->super->s_uuid, 0x30, sizeof(fs->super->s_uuid)); in main()
992 print_csum("new_uuid", fs, 0); in main()
993 if (ext2fs_group_desc_csum_verify(fs, 0) != 0) { in main()
997 csum1 = ext2fs_group_desc_csum(fs, 0); in main()
998 ext2fs_bg_checksum_set(fs, 0, csum1); in main()
999 print_csum("csum_new", fs, 0); in main()
1000 ext2fs_bg_free_blocks_count_set(fs, 0, 1); in main()
1001 csum2 = ext2fs_group_desc_csum(fs, 0); in main()
1002 print_csum("csum_blk", fs, 0); in main()
1007 ext2fs_free(fs); in main()