• Home
  • Raw
  • Download

Lines Matching refs:fs

44 static void fix_uninit_block_bitmaps(ext2_filsys fs);
51 static errcode_t fix_resize_inode(ext2_filsys fs);
52 static errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs);
53 static errcode_t fix_sb_journal_backup(ext2_filsys fs);
54 static errcode_t mark_table_blocks(ext2_filsys fs,
66 static inline int is_block_bm(ext2_filsys fs, unsigned int grp, blk64_t blk) in is_block_bm() argument
68 return blk == ext2fs_block_bitmap_loc(fs, grp); in is_block_bm()
71 static inline int is_inode_bm(ext2_filsys fs, unsigned int grp, blk64_t blk) in is_inode_bm() argument
73 return blk == ext2fs_inode_bitmap_loc(fs, grp); in is_inode_bm()
76 static int is_inode_tb(ext2_filsys fs, unsigned int grp, blk64_t blk) in is_inode_tb() argument
78 return blk >= ext2fs_inode_table_loc(fs, grp) && in is_inode_tb()
79 blk < (ext2fs_inode_table_loc(fs, grp) + in is_inode_tb()
80 fs->inode_blocks_per_group); in is_inode_tb()
84 #define B2C(x) EXT2FS_B2C(fs, (x))
85 #define C2B(x) EXT2FS_C2B(fs, (x))
97 errcode_t resize_fs(ext2_filsys fs, blk64_t *new_size, int flags, in resize_fs() argument
114 fs->priv_data = rfs; in resize_fs()
115 rfs->old_fs = fs; in resize_fs()
120 init_resource_track(&overall_track, "overall resize2fs", fs->io); in resize_fs()
121 init_resource_track(&rtrack, "read_bitmaps", fs->io); in resize_fs()
122 retval = ext2fs_read_bitmaps(fs); in resize_fs()
125 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
127 fs->super->s_state |= EXT2_ERROR_FS; in resize_fs()
128 ext2fs_mark_super_dirty(fs); in resize_fs()
129 ext2fs_flush(fs); in resize_fs()
131 init_resource_track(&rtrack, "fix_uninit_block_bitmaps 1", fs->io); in resize_fs()
132 fix_uninit_block_bitmaps(fs); in resize_fs()
133 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
134 retval = ext2fs_dup_handle(fs, &rfs->new_fs); in resize_fs()
138 init_resource_track(&rtrack, "resize_group_descriptors", fs->io); in resize_fs()
142 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
144 init_resource_track(&rtrack, "move_bg_metadata", fs->io); in resize_fs()
148 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
150 init_resource_track(&rtrack, "zero_high_bits_in_metadata", fs->io); in resize_fs()
154 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
156 init_resource_track(&rtrack, "adjust_superblock", fs->io); in resize_fs()
160 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
162 init_resource_track(&rtrack, "fix_uninit_block_bitmaps 2", fs->io); in resize_fs()
164 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
171 init_resource_track(&rtrack, "blocks_to_move", fs->io); in resize_fs()
175 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
185 init_resource_track(&rtrack, "block_mover", fs->io); in resize_fs()
189 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
191 init_resource_track(&rtrack, "inode_scan_and_fix", fs->io); in resize_fs()
195 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
197 init_resource_track(&rtrack, "inode_ref_fix", fs->io); in resize_fs()
201 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
203 init_resource_track(&rtrack, "move_itables", fs->io); in resize_fs()
207 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
213 init_resource_track(&rtrack, "calculate_summary_stats", fs->io); in resize_fs()
217 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
219 init_resource_track(&rtrack, "fix_resize_inode", fs->io); in resize_fs()
223 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
225 init_resource_track(&rtrack, "fix_sb_journal_backup", fs->io); in resize_fs()
229 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
238 print_resource_track(rfs, &overall_track, fs->io); in resize_fs()
269 static void adjust_reserved_gdt_blocks(ext2_filsys old_fs, ext2_filsys fs) in adjust_reserved_gdt_blocks() argument
271 if (ext2fs_has_feature_resize_inode(fs->super) && in adjust_reserved_gdt_blocks()
272 (old_fs->desc_blocks != fs->desc_blocks)) { in adjust_reserved_gdt_blocks()
275 new = ((int) fs->super->s_reserved_gdt_blocks) + in adjust_reserved_gdt_blocks()
276 (old_fs->desc_blocks - fs->desc_blocks); in adjust_reserved_gdt_blocks()
279 if (new > (int) fs->blocksize/4) in adjust_reserved_gdt_blocks()
280 new = fs->blocksize/4; in adjust_reserved_gdt_blocks()
281 fs->super->s_reserved_gdt_blocks = new; in adjust_reserved_gdt_blocks()
474 static errcode_t zero_high_bits_in_extents(ext2_filsys fs, ext2_ino_t ino, in zero_high_bits_in_extents() argument
485 errcode = ext2fs_extent_open(fs, ino, &handle); in zero_high_bits_in_extents()
514 ext2_filsys fs = rfs->old_fs; in zero_high_bits_in_inodes() local
515 int length = EXT2_INODE_SIZE(fs->super); in zero_high_bits_in_inodes()
524 if (fs->super->s_creator_os == EXT2_OS_HURD) in zero_high_bits_in_inodes()
527 retval = ext2fs_open_inode_scan(fs, 0, &scan); in zero_high_bits_in_inodes()
541 if (!ext2fs_test_inode_bitmap2(fs->inode_map, ino)) in zero_high_bits_in_inodes()
561 retval = ext2fs_write_inode_full(fs, ino, inode, in zero_high_bits_in_inodes()
567 retval = zero_high_bits_in_extents(fs, ino, inode); in zero_high_bits_in_inodes()
583 static void fix_uninit_block_bitmaps(ext2_filsys fs) in fix_uninit_block_bitmaps() argument
589 if (!ext2fs_has_group_desc_csum(fs)) in fix_uninit_block_bitmaps()
592 for (g=0; g < fs->group_desc_count; g++) { in fix_uninit_block_bitmaps()
593 if (!(ext2fs_bg_flags_test(fs, g, EXT2_BG_BLOCK_UNINIT))) in fix_uninit_block_bitmaps()
596 blk = ext2fs_group_first_block2(fs, g); in fix_uninit_block_bitmaps()
597 lblk = ext2fs_group_last_block2(fs, g); in fix_uninit_block_bitmaps()
598 ext2fs_unmark_block_bitmap_range2(fs->block_map, blk, in fix_uninit_block_bitmaps()
601 ext2fs_reserve_super_and_bgd(fs, g, fs->block_map); in fix_uninit_block_bitmaps()
602 ext2fs_mark_block_bitmap2(fs->block_map, in fix_uninit_block_bitmaps()
603 ext2fs_block_bitmap_loc(fs, g)); in fix_uninit_block_bitmaps()
604 ext2fs_mark_block_bitmap2(fs->block_map, in fix_uninit_block_bitmaps()
605 ext2fs_inode_bitmap_loc(fs, g)); in fix_uninit_block_bitmaps()
606 for (i = 0, blk = ext2fs_inode_table_loc(fs, g); in fix_uninit_block_bitmaps()
607 i < fs->inode_blocks_per_group; in fix_uninit_block_bitmaps()
609 ext2fs_mark_block_bitmap2(fs->block_map, blk); in fix_uninit_block_bitmaps()
629 static errcode_t free_gdp_blocks(ext2_filsys fs, in free_gdp_blocks() argument
639 dgrp_t count = old_fs->group_desc_count - fs->group_desc_count; in free_gdp_blocks()
642 if (EXT2FS_CLUSTER_RATIO(fs) > 1) { in free_gdp_blocks()
643 retval = ext2fs_allocate_block_bitmap(fs, "bgdata", &bg_map); in free_gdp_blocks()
647 retval = mark_table_blocks(fs, bg_map); in free_gdp_blocks()
655 (blk < ext2fs_blocks_count(fs->super)) && in free_gdp_blocks()
657 ext2fs_block_alloc_stats2(fs, blk, -1); in free_gdp_blocks()
663 (blk < ext2fs_blocks_count(fs->super)) && in free_gdp_blocks()
665 ext2fs_block_alloc_stats2(fs, blk, -1); in free_gdp_blocks()
671 j < fs->inode_blocks_per_group; j++, blk++) { in free_gdp_blocks()
672 if (blk >= ext2fs_blocks_count(fs->super) || in free_gdp_blocks()
675 ext2fs_block_alloc_stats2(fs, blk, -1); in free_gdp_blocks()
690 errcode_t adjust_fs_info(ext2_filsys fs, ext2_filsys old_fs, in adjust_fs_info() argument
705 ext2fs_blocks_count_set(fs->super, new_size); in adjust_fs_info()
708 fs->group_desc_count = ext2fs_div64_ceil(ext2fs_blocks_count(fs->super) - in adjust_fs_info()
709 fs->super->s_first_data_block, in adjust_fs_info()
710 EXT2_BLOCKS_PER_GROUP(fs->super)); in adjust_fs_info()
711 if (fs->group_desc_count == 0) in adjust_fs_info()
713 fs->desc_blocks = ext2fs_div_ceil(fs->group_desc_count, in adjust_fs_info()
714 EXT2_DESC_PER_BLOCK(fs->super)); in adjust_fs_info()
722 overhead = (int) (2 + fs->inode_blocks_per_group); in adjust_fs_info()
725 if (ext2fs_has_feature_sparse_super2(fs->super)) { in adjust_fs_info()
730 if (fs->group_desc_count == 2) in adjust_fs_info()
731 has_bg = fs->super->s_backup_bgs[0] != 0; in adjust_fs_info()
733 has_bg = fs->super->s_backup_bgs[1] != 0; in adjust_fs_info()
735 has_bg = ext2fs_bg_has_super(fs, fs->group_desc_count - 1); in adjust_fs_info()
737 overhead += 1 + fs->desc_blocks + in adjust_fs_info()
738 fs->super->s_reserved_gdt_blocks; in adjust_fs_info()
745 rem = (ext2fs_blocks_count(fs->super) - fs->super->s_first_data_block) % in adjust_fs_info()
746 fs->super->s_blocks_per_group; in adjust_fs_info()
747 if ((fs->group_desc_count == 1) && rem && (rem < overhead)) in adjust_fs_info()
749 if ((fs->group_desc_count > 1) && rem && (rem < overhead+50)) { in adjust_fs_info()
750 ext2fs_blocks_count_set(fs->super, in adjust_fs_info()
751 ext2fs_blocks_count(fs->super) - rem); in adjust_fs_info()
757 new_inodes =(unsigned long long) fs->super->s_inodes_per_group * fs->group_desc_count; in adjust_fs_info()
763 fs->super->s_inodes_count = fs->super->s_inodes_per_group * in adjust_fs_info()
764 fs->group_desc_count; in adjust_fs_info()
770 if (blk > ext2fs_blocks_count(fs->super)) in adjust_fs_info()
771 ext2fs_free_blocks_count_set(fs->super, in adjust_fs_info()
772 ext2fs_free_blocks_count(fs->super) - in adjust_fs_info()
773 (blk - ext2fs_blocks_count(fs->super))); in adjust_fs_info()
775 ext2fs_free_blocks_count_set(fs->super, in adjust_fs_info()
776 ext2fs_free_blocks_count(fs->super) + in adjust_fs_info()
777 (ext2fs_blocks_count(fs->super) - blk)); in adjust_fs_info()
784 ext2fs_r_blocks_count_set(fs->super, in adjust_fs_info()
785 (percent * ext2fs_blocks_count(fs->super) / in adjust_fs_info()
791 retval = ext2fs_resize_inode_bitmap2(fs->super->s_inodes_count, in adjust_fs_info()
792 fs->super->s_inodes_count, in adjust_fs_info()
793 fs->inode_map); in adjust_fs_info()
796 real_end = EXT2_GROUPS_TO_BLOCKS(fs->super, fs->group_desc_count) - 1 + in adjust_fs_info()
797 fs->super->s_first_data_block; in adjust_fs_info()
799 real_end, fs->block_map); in adjust_fs_info()
815 if (EXT2_DESC_SIZE(old_fs->super) == EXT2_DESC_SIZE(fs->super) && in adjust_fs_info()
816 old_fs->desc_blocks != fs->desc_blocks) { in adjust_fs_info()
818 fs->blocksize, in adjust_fs_info()
819 fs->desc_blocks * fs->blocksize, in adjust_fs_info()
820 &fs->group_desc); in adjust_fs_info()
823 if (fs->desc_blocks > old_fs->desc_blocks) in adjust_fs_info()
824 memset((char *) fs->group_desc + in adjust_fs_info()
825 (old_fs->desc_blocks * fs->blocksize), 0, in adjust_fs_info()
826 (fs->desc_blocks - old_fs->desc_blocks) * in adjust_fs_info()
827 fs->blocksize); in adjust_fs_info()
838 if (EXT2_DESC_SIZE(old_fs->super) == EXT2_DESC_SIZE(fs->super)) in adjust_fs_info()
839 adjust_reserved_gdt_blocks(old_fs, fs); in adjust_fs_info()
841 if (ext2fs_has_feature_meta_bg(fs->super) && in adjust_fs_info()
842 (fs->super->s_first_meta_bg > fs->desc_blocks)) { in adjust_fs_info()
843 ext2fs_clear_feature_meta_bg(fs->super); in adjust_fs_info()
844 fs->super->s_first_meta_bg = 0; in adjust_fs_info()
851 if (ext2fs_has_feature_sparse_super2(fs->super)) { in adjust_fs_info()
852 dgrp_t last_bg = fs->group_desc_count - 1; in adjust_fs_info()
857 fs->super->s_backup_bgs[0] = 1; in adjust_fs_info()
859 fs->group_desc_count > 2) || in adjust_fs_info()
860 fs->super->s_backup_bgs[1]) in adjust_fs_info()
861 fs->super->s_backup_bgs[1] = last_bg; in adjust_fs_info()
863 if (fs->super->s_backup_bgs[0] > last_bg) in adjust_fs_info()
864 fs->super->s_backup_bgs[0] = 0; in adjust_fs_info()
865 if (fs->super->s_backup_bgs[1] > last_bg) in adjust_fs_info()
866 fs->super->s_backup_bgs[1] = 0; in adjust_fs_info()
869 fs->super->s_backup_bgs[1] = last_bg; in adjust_fs_info()
877 if (old_fs->group_desc_count > fs->group_desc_count) { in adjust_fs_info()
882 retval = free_gdp_blocks(fs, reserve_blocks, old_fs, in adjust_fs_info()
883 fs->group_desc_count); in adjust_fs_info()
895 if (old_fs->group_desc_count == fs->group_desc_count) { in adjust_fs_info()
896 numblocks = (ext2fs_blocks_count(fs->super) - in adjust_fs_info()
897 fs->super->s_first_data_block) % in adjust_fs_info()
898 fs->super->s_blocks_per_group; in adjust_fs_info()
900 numblocks = fs->super->s_blocks_per_group; in adjust_fs_info()
902 numblocks = fs->super->s_blocks_per_group; in adjust_fs_info()
904 …ext2fs_bg_free_blocks_count_set(fs, i, ext2fs_bg_free_blocks_count(fs, i) + (numblocks - old_numbl… in adjust_fs_info()
905 ext2fs_group_desc_csum_set(fs, i); in adjust_fs_info()
912 if (old_fs->group_desc_count >= fs->group_desc_count) { in adjust_fs_info()
920 group_block = ext2fs_group_first_block2(fs, in adjust_fs_info()
922 csum_flag = ext2fs_has_group_desc_csum(fs); in adjust_fs_info()
927 if (ext2fs_has_feature_meta_bg(fs->super)) in adjust_fs_info()
928 old_desc_blocks = fs->super->s_first_meta_bg; in adjust_fs_info()
930 old_desc_blocks = fs->desc_blocks + in adjust_fs_info()
931 fs->super->s_reserved_gdt_blocks; in adjust_fs_info()
939 ext2fs_reserve_super_and_bgd(fs, i, fs->block_map); in adjust_fs_info()
942 i < fs->group_desc_count; i++) { in adjust_fs_info()
943 memset(ext2fs_group_desc(fs, fs->group_desc, i), 0, in adjust_fs_info()
947 ext2fs_bg_flags_zap(fs, i); in adjust_fs_info()
949 ext2fs_bg_flags_set(fs, i, EXT2_BG_INODE_UNINIT); in adjust_fs_info()
951 ext2fs_bg_flags_set(fs, i, in adjust_fs_info()
953 ext2fs_bg_itable_unused_set(fs, i, in adjust_fs_info()
954 fs->super->s_inodes_per_group); in adjust_fs_info()
957 numblocks = ext2fs_group_blocks_count(fs, i); in adjust_fs_info()
958 if ((i < fs->group_desc_count - 1) && csum_flag) in adjust_fs_info()
959 ext2fs_bg_flags_set(fs, i, EXT2_BG_BLOCK_UNINIT); in adjust_fs_info()
961 has_super = ext2fs_bg_has_super(fs, i); in adjust_fs_info()
963 ext2fs_block_alloc_stats2(fs, group_block, +1); in adjust_fs_info()
966 meta_bg_size = EXT2_DESC_PER_BLOCK(fs->super); in adjust_fs_info()
968 if (!ext2fs_has_feature_meta_bg(fs->super) || in adjust_fs_info()
969 (meta_bg < fs->super->s_first_meta_bg)) { in adjust_fs_info()
972 ext2fs_block_alloc_stats2(fs, in adjust_fs_info()
982 ext2fs_block_alloc_stats2(fs, in adjust_fs_info()
986 adjblocks += 2 + fs->inode_blocks_per_group; in adjust_fs_info()
989 ext2fs_free_blocks_count_set(fs->super, in adjust_fs_info()
990 ext2fs_free_blocks_count(fs->super) - adjblocks); in adjust_fs_info()
991 fs->super->s_free_inodes_count += in adjust_fs_info()
992 fs->super->s_inodes_per_group; in adjust_fs_info()
993 ext2fs_bg_free_blocks_count_set(fs, i, numblocks); in adjust_fs_info()
994 ext2fs_bg_free_inodes_count_set(fs, i, in adjust_fs_info()
995 fs->super->s_inodes_per_group); in adjust_fs_info()
996 ext2fs_bg_used_dirs_count_set(fs, i, 0); in adjust_fs_info()
997 ext2fs_group_desc_csum_set(fs, i); in adjust_fs_info()
999 retval = ext2fs_allocate_group_table(fs, i, 0); in adjust_fs_info()
1002 group_block += fs->super->s_blocks_per_group; in adjust_fs_info()
1015 mark_table_blocks(fs, reserve_blocks); in adjust_fs_info()
1027 ext2_filsys fs = rfs->new_fs; in adjust_superblock() local
1034 ext2fs_mark_super_dirty(fs); in adjust_superblock()
1035 ext2fs_mark_bb_dirty(fs); in adjust_superblock()
1036 ext2fs_mark_ib_dirty(fs); in adjust_superblock()
1038 retval = ext2fs_allocate_block_bitmap(fs, _("reserved blocks"), in adjust_superblock()
1043 retval = adjust_fs_info(fs, rfs->old_fs, rfs->reserve_blocks, new_size); in adjust_superblock()
1061 if (rfs->old_fs->group_desc_count > fs->group_desc_count) { in adjust_superblock()
1071 if (rfs->old_fs->group_desc_count >= fs->group_desc_count) { in adjust_superblock()
1081 if (lazy_itable_init && ext2fs_has_group_desc_csum(fs)) { in adjust_superblock()
1089 retval = ext2fs_get_array(fs->blocksize, fs->inode_blocks_per_group, in adjust_superblock()
1094 memset(rfs->itable_buf, 0, fs->blocksize * fs->inode_blocks_per_group); in adjust_superblock()
1095 group_block = ext2fs_group_first_block2(fs, in adjust_superblock()
1098 max_group = fs->group_desc_count - adj; in adjust_superblock()
1106 i < fs->group_desc_count; i++) { in adjust_superblock()
1110 retval = ext2fs_zero_blocks2(fs, ext2fs_inode_table_loc(fs, i), in adjust_superblock()
1111 fs->inode_blocks_per_group, NULL, in adjust_superblock()
1116 io_channel_flush(fs->io); in adjust_superblock()
1123 group_block += fs->super->s_blocks_per_group; in adjust_superblock()
1125 io_channel_flush(fs->io); in adjust_superblock()
1148 static errcode_t mark_table_blocks(ext2_filsys fs, in mark_table_blocks() argument
1154 for (i = 0; i < fs->group_desc_count; i++) { in mark_table_blocks()
1155 ext2fs_reserve_super_and_bgd(fs, i, bmap); in mark_table_blocks()
1160 blk = ext2fs_inode_table_loc(fs, i); in mark_table_blocks()
1163 fs->inode_blocks_per_group); in mark_table_blocks()
1168 blk = ext2fs_block_bitmap_loc(fs, i); in mark_table_blocks()
1175 blk = ext2fs_inode_bitmap_loc(fs, i); in mark_table_blocks()
1191 ext2_filsys fs = rfs->new_fs; in mark_fs_metablock() local
1194 ext2fs_block_alloc_stats2(fs, blk, +1); in mark_fs_metablock()
1201 if (is_block_bm(fs, group, blk)) { in mark_fs_metablock()
1202 ext2fs_block_bitmap_loc_set(fs, group, 0); in mark_fs_metablock()
1206 if (is_inode_bm(fs, group, blk)) { in mark_fs_metablock()
1207 ext2fs_inode_bitmap_loc_set(fs, group, 0); in mark_fs_metablock()
1211 if (is_inode_tb(fs, group, blk)) { in mark_fs_metablock()
1212 ext2fs_inode_table_loc_set(fs, group, 0); in mark_fs_metablock()
1216 if (ext2fs_has_feature_flex_bg(fs->super)) { in mark_fs_metablock()
1220 if (is_block_bm(fs, i, blk)) { in mark_fs_metablock()
1221 ext2fs_block_bitmap_loc_set(fs, i, 0); in mark_fs_metablock()
1225 if (is_inode_bm(fs, i, blk)) { in mark_fs_metablock()
1226 ext2fs_inode_bitmap_loc_set(fs, i, 0); in mark_fs_metablock()
1230 if (is_inode_tb(fs, i, blk)) { in mark_fs_metablock()
1231 ext2fs_inode_table_loc_set(fs, i, 0); in mark_fs_metablock()
1238 if (ext2fs_has_group_desc_csum(fs) && in mark_fs_metablock()
1239 (ext2fs_bg_flags_test(fs, group, EXT2_BG_BLOCK_UNINIT))) { in mark_fs_metablock()
1268 ext2_filsys fs, old_fs; in blocks_to_move() local
1272 fs = rfs->new_fs; in blocks_to_move()
1274 if (ext2fs_blocks_count(old_fs->super) > ext2fs_blocks_count(fs->super)) in blocks_to_move()
1275 fs = rfs->old_fs; in blocks_to_move()
1277 retval = ext2fs_allocate_block_bitmap(fs, _("blocks to be moved"), in blocks_to_move()
1282 retval = ext2fs_allocate_block_bitmap(fs, _("meta-data blocks"), in blocks_to_move()
1291 fs = rfs->new_fs; in blocks_to_move()
1299 new_size = ext2fs_blocks_count(fs->super); in blocks_to_move()
1301 for (g = 0; g < fs->group_desc_count; g++) { in blocks_to_move()
1307 if (ext2fs_block_bitmap_loc(fs, g) >= new_size) { in blocks_to_move()
1308 ext2fs_block_bitmap_loc_set(fs, g, 0); in blocks_to_move()
1311 if (ext2fs_inode_bitmap_loc(fs, g) >= new_size) { in blocks_to_move()
1312 ext2fs_inode_bitmap_loc_set(fs, g, 0); in blocks_to_move()
1315 if ((ext2fs_inode_table_loc(fs, g) + in blocks_to_move()
1316 fs->inode_blocks_per_group) > new_size) { in blocks_to_move()
1317 ext2fs_inode_table_loc_set(fs, g, 0); in blocks_to_move()
1322 retval = ext2fs_allocate_group_table(fs, g, 0); in blocks_to_move()
1333 for (blk = ext2fs_blocks_count(fs->super); in blocks_to_move()
1335 g = ext2fs_group_of_blk2(fs, blk); in blocks_to_move()
1336 if (ext2fs_has_group_desc_csum(fs) && in blocks_to_move()
1342 blk = ext2fs_group_first_block2(fs, g+1) - 1; in blocks_to_move()
1358 if (ext2fs_has_feature_meta_bg(fs->super)) in blocks_to_move()
1359 new_blocks = fs->super->s_first_meta_bg; in blocks_to_move()
1361 new_blocks = fs->desc_blocks + fs->super->s_reserved_gdt_blocks; in blocks_to_move()
1374 max_groups = fs->group_desc_count; in blocks_to_move()
1384 if (EXT2FS_CLUSTER_RATIO(fs) > 1) { in blocks_to_move()
1385 retval = ext2fs_allocate_block_bitmap(fs, in blocks_to_move()
1391 retval = mark_table_blocks(fs, new_meta_bmap); in blocks_to_move()
1398 group_blk += fs->super->s_blocks_per_group; in blocks_to_move()
1408 EXT2FS_CLUSTER_RATIO(fs) - in blocks_to_move()
1410 EXT2FS_CLUSTER_MASK(fs)); in blocks_to_move()
1413 ext2fs_block_alloc_stats2(fs, blk, -1); in blocks_to_move()
1414 blk += EXT2FS_CLUSTER_RATIO(fs); in blocks_to_move()
1421 group_blk += fs->super->s_blocks_per_group; in blocks_to_move()
1430 meta_bg_size = EXT2_DESC_PER_BLOCK(fs->super); in blocks_to_move()
1431 flex_bg = ext2fs_has_feature_flex_bg(fs->super); in blocks_to_move()
1434 has_super = ext2fs_bg_has_super(fs, i); in blocks_to_move()
1439 if (!ext2fs_has_feature_meta_bg(fs->super) || in blocks_to_move()
1440 (meta_bg < fs->super->s_first_meta_bg)) { in blocks_to_move()
1467 if (ext2fs_block_bitmap_loc(fs, i)) in blocks_to_move()
1469 ext2fs_block_bitmap_loc(fs, i)); in blocks_to_move()
1474 if (ext2fs_inode_bitmap_loc(fs, i)) in blocks_to_move()
1476 ext2fs_inode_bitmap_loc(fs, i)); in blocks_to_move()
1481 if (ext2fs_inode_table_loc(fs, i)) in blocks_to_move()
1483 ext2fs_inode_table_loc(fs, i), in blocks_to_move()
1484 fs->inode_blocks_per_group); in blocks_to_move()
1495 if (ext2fs_inode_table_loc(fs, i) && in blocks_to_move()
1496 ext2fs_inode_bitmap_loc(fs, i) && in blocks_to_move()
1497 ext2fs_block_bitmap_loc(fs, i)) in blocks_to_move()
1500 retval = ext2fs_allocate_group_table(fs, i, in blocks_to_move()
1510 (blk = ext2fs_block_bitmap_loc(fs, i))) { in blocks_to_move()
1511 ext2fs_block_alloc_stats2(fs, blk, +1); in blocks_to_move()
1518 (blk = ext2fs_inode_bitmap_loc(fs, i))) { in blocks_to_move()
1519 ext2fs_block_alloc_stats2(fs, blk, +1); in blocks_to_move()
1533 if (ext2fs_inode_table_loc(fs, i) == ext2fs_inode_table_loc(old_fs, i)) in blocks_to_move()
1536 rfs->needed_blocks += fs->inode_blocks_per_group; in blocks_to_move()
1543 for (blk = ext2fs_inode_table_loc(fs, i), j=0; in blocks_to_move()
1544 j < fs->inode_blocks_per_group ; j++, blk++) { in blocks_to_move()
1545 ext2fs_block_alloc_stats2(fs, blk, +1); in blocks_to_move()
1557 j < fs->inode_blocks_per_group ; j++, blk++) in blocks_to_move()
1602 ext2_filsys fs = rfs->new_fs; in get_new_block() local
1605 if (rfs->new_blk >= ext2fs_blocks_count(fs->super)) { in get_new_block()
1615 rfs->new_blk = fs->super->s_first_data_block; in get_new_block()
1618 if (ext2fs_test_block_bitmap2(fs->block_map, rfs->new_blk) || in get_new_block()
1632 static errcode_t resize2fs_get_alloc_block(ext2_filsys fs, in resize2fs_get_alloc_block() argument
1636 ext2_resize_t rfs = (ext2_resize_t) fs->priv_data; in resize2fs_get_alloc_block()
1664 ext2_filsys fs = rfs->new_fs; in block_mover() local
1672 fs->get_alloc_block = resize2fs_get_alloc_block; in block_mover()
1679 new_blk = fs->super->s_first_data_block; in block_mover()
1681 retval = ext2fs_get_array(fs->blocksize, in block_mover()
1682 fs->inode_blocks_per_group, in block_mover()
1699 blk += EXT2FS_CLUSTER_RATIO(fs)) { in block_mover()
1715 ext2fs_block_alloc_stats2(fs, new_blk, +1); in block_mover()
1756 if (c > fs->inode_blocks_per_group) in block_mover()
1757 c = fs->inode_blocks_per_group; in block_mover()
1758 retval = io_channel_read_blk64(fs->io, old_blk, c, in block_mover()
1761 retval = io_channel_write_blk64(fs->io, new_blk, c, in block_mover()
1769 io_channel_flush(fs->io); in block_mover()
1777 io_channel_flush(fs->io); in block_mover()
1804 static __u64 extent_translate(ext2_filsys fs, ext2_extent extent, __u64 old_loc) in extent_translate() argument
1809 new_block += old_loc & (EXT2FS_CLUSTER_RATIO(fs) - 1); in extent_translate()
1824 static int process_block(ext2_filsys fs, blk64_t *block_nr, in process_block() argument
1837 new_block = extent_translate(fs, pb->rfs->bmap, block); in process_block()
1853 retval = ext2fs_add_dir_block2(fs->dblist, pb->ino, in process_block()
1866 static errcode_t progress_callback(ext2_filsys fs, in progress_callback() argument
1881 io_channel_flush(fs->io); in progress_callback()
1883 group+1, fs->group_desc_count); in progress_callback()
2005 ext2_filsys fs = rfs->new_fs; in fix_ea_inode_refs() local
2008 int inode_size = EXT2_INODE_SIZE(fs->super); in fix_ea_inode_refs()
2019 retval = ext2fs_open_inode_scan(fs, 0, &scan); in fix_ea_inode_refs()
2039 retval = ext2fs_write_inode_full(fs, ino, inode, in fix_ea_inode_refs()
2046 blk = ext2fs_file_acl_block(fs, inode); in fix_ea_inode_refs()
2048 retval = ext2fs_read_ext_attr3(fs, blk, block_buf, ino); in fix_ea_inode_refs()
2053 fs->blocksize, in fix_ea_inode_refs()
2056 retval = ext2fs_write_ext_attr3(fs, blk, in fix_ea_inode_refs()
2401 ext2_filsys fs = rfs->new_fs; in move_itables() local
2409 max_groups = fs->group_desc_count; in move_itables()
2413 size = fs->blocksize * fs->inode_blocks_per_group; in move_itables()
2420 if (EXT2FS_CLUSTER_RATIO(fs) > 1) { in move_itables()
2421 retval = ext2fs_allocate_block_bitmap(fs, _("new meta blocks"), in move_itables()
2426 retval = mark_table_blocks(fs, new_bmap); in move_itables()
2437 ext2fs_inode_table_loc(fs, i)) in move_itables()
2456 new_blk = ext2fs_inode_table_loc(fs, i); in move_itables()
2470 retval = io_channel_read_blk64(fs->io, old_blk, in move_itables()
2471 fs->inode_blocks_per_group, in move_itables()
2485 n = n >> EXT2_BLOCK_SIZE_BITS(fs->super); in move_itables()
2490 num = fs->inode_blocks_per_group; in move_itables()
2494 retval = io_channel_write_blk64(fs->io, new_blk, in move_itables()
2497 io_channel_write_blk64(fs->io, old_blk, in move_itables()
2502 retval = io_channel_write_blk64(fs->io, in move_itables()
2503 old_blk + fs->inode_blocks_per_group, in move_itables()
2505 (fs->inode_blocks_per_group - diff) * in move_itables()
2506 fs->blocksize)); in move_itables()
2512 j < fs->inode_blocks_per_group;) { in move_itables()
2515 ext2fs_block_alloc_stats2(fs, blk, -1); in move_itables()
2516 cluster_freed = EXT2FS_CLUSTER_RATIO(fs) - in move_itables()
2517 (blk & EXT2FS_CLUSTER_MASK(fs)); in move_itables()
2538 mark_table_blocks(fs, fs->block_map); in move_itables()
2539 ext2fs_flush(fs); in move_itables()
2559 ext2_filsys fs = rfs->new_fs; in clear_sparse_super2_last_group() local
2563 dgrp_t last_bg = fs->group_desc_count - 1; in clear_sparse_super2_last_group()
2567 if (!ext2fs_has_feature_sparse_super2(fs->super)) in clear_sparse_super2_last_group()
2573 if (fs->super->s_backup_bgs[0] == old_fs->super->s_backup_bgs[0] && in clear_sparse_super2_last_group()
2574 fs->super->s_backup_bgs[1] == old_fs->super->s_backup_bgs[1]) in clear_sparse_super2_last_group()
2581 if (fs->super->s_backup_bgs[0] == old_last_bg || in clear_sparse_super2_last_group()
2582 fs->super->s_backup_bgs[1] == old_last_bg) in clear_sparse_super2_last_group()
2594 ext2fs_unmark_block_bitmap2(fs->block_map, sb); in clear_sparse_super2_last_group()
2596 ext2fs_unmark_block_bitmap_range2(fs->block_map, old_desc, num); in clear_sparse_super2_last_group()
2610 ext2_filsys fs = rfs->new_fs; in reserve_sparse_super2_last_group() local
2614 dgrp_t last_bg = fs->group_desc_count - 1; in reserve_sparse_super2_last_group()
2620 if (!ext2fs_has_feature_sparse_super2(fs->super)) in reserve_sparse_super2_last_group()
2626 if (fs->super->s_backup_bgs[0] == old_fs->super->s_backup_bgs[0] && in reserve_sparse_super2_last_group()
2627 fs->super->s_backup_bgs[1] == old_fs->super->s_backup_bgs[1]) in reserve_sparse_super2_last_group()
2630 if (fs->super->s_backup_bgs[0] != last_bg && in reserve_sparse_super2_last_group()
2631 fs->super->s_backup_bgs[1] != last_bg) in reserve_sparse_super2_last_group()
2657 ext2fs_mark_block_bitmap_range2(fs->block_map, sb, num); in reserve_sparse_super2_last_group()
2659 for (g = 0; g < fs->group_desc_count; g++) { in reserve_sparse_super2_last_group()
2662 mb = ext2fs_block_bitmap_loc(fs, g); in reserve_sparse_super2_last_group()
2664 ext2fs_block_bitmap_loc_set(fs, g, 0); in reserve_sparse_super2_last_group()
2667 mb = ext2fs_inode_bitmap_loc(fs, g); in reserve_sparse_super2_last_group()
2669 ext2fs_inode_bitmap_loc_set(fs, g, 0); in reserve_sparse_super2_last_group()
2672 mb = ext2fs_inode_table_loc(fs, g); in reserve_sparse_super2_last_group()
2674 (sb < mb + fs->inode_blocks_per_group)) { in reserve_sparse_super2_last_group()
2675 ext2fs_inode_table_loc_set(fs, g, 0); in reserve_sparse_super2_last_group()
2679 retval = ext2fs_allocate_group_table(fs, g, 0); in reserve_sparse_super2_last_group()
2699 static errcode_t fix_resize_inode(ext2_filsys fs) in fix_resize_inode() argument
2704 if (!ext2fs_has_feature_resize_inode(fs->super)) in fix_resize_inode()
2707 retval = ext2fs_read_inode(fs, EXT2_RESIZE_INO, &inode); in fix_resize_inode()
2710 ext2fs_iblk_set(fs, &inode, 1); in fix_resize_inode()
2712 retval = ext2fs_write_inode(fs, EXT2_RESIZE_INO, &inode); in fix_resize_inode()
2726 retval = ext2fs_zero_blocks2(fs, inode.i_block[EXT2_DIND_BLOCK], 1, in fix_resize_inode()
2731 retval = ext2fs_create_resize_inode(fs); in fix_resize_inode()
2742 static errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs) in ext2fs_calculate_summary_stats() argument
2758 uninit = ext2fs_bg_flags_test(fs, group, EXT2_BG_BLOCK_UNINIT); in ext2fs_calculate_summary_stats()
2759 ext2fs_super_and_bgd_loc2(fs, group, &super_blk, &old_desc_blk, in ext2fs_calculate_summary_stats()
2761 if (ext2fs_has_feature_meta_bg(fs->super)) in ext2fs_calculate_summary_stats()
2762 old_desc_blocks = fs->super->s_first_meta_bg; in ext2fs_calculate_summary_stats()
2764 old_desc_blocks = fs->desc_blocks + in ext2fs_calculate_summary_stats()
2765 fs->super->s_reserved_gdt_blocks; in ext2fs_calculate_summary_stats()
2766 for (blk = B2C(fs->super->s_first_data_block); in ext2fs_calculate_summary_stats()
2767 blk < ext2fs_blocks_count(fs->super); in ext2fs_calculate_summary_stats()
2768 blk += EXT2FS_CLUSTER_RATIO(fs)) { in ext2fs_calculate_summary_stats()
2775 EQ_CLSTR(blk, ext2fs_block_bitmap_loc(fs, group)) || in ext2fs_calculate_summary_stats()
2776 EQ_CLSTR(blk, ext2fs_inode_bitmap_loc(fs, group)) || in ext2fs_calculate_summary_stats()
2777 ((GE_CLSTR(blk, ext2fs_inode_table_loc(fs, group)) && in ext2fs_calculate_summary_stats()
2778 LT_CLSTR(blk, ext2fs_inode_table_loc(fs, group) in ext2fs_calculate_summary_stats()
2779 + fs->inode_blocks_per_group))))) || in ext2fs_calculate_summary_stats()
2780 (!ext2fs_fast_test_block_bitmap2(fs->block_map, blk))) { in ext2fs_calculate_summary_stats()
2785 if ((count == fs->super->s_clusters_per_group) || in ext2fs_calculate_summary_stats()
2786 EQ_CLSTR(blk, ext2fs_blocks_count(fs->super)-1)) { in ext2fs_calculate_summary_stats()
2787 ext2fs_bg_free_blocks_count_set(fs, group, group_free); in ext2fs_calculate_summary_stats()
2788 ext2fs_group_desc_csum_set(fs, group); in ext2fs_calculate_summary_stats()
2790 if (group >= fs->group_desc_count) in ext2fs_calculate_summary_stats()
2794 uninit = ext2fs_bg_flags_test(fs, group, EXT2_BG_BLOCK_UNINIT); in ext2fs_calculate_summary_stats()
2795 ext2fs_super_and_bgd_loc2(fs, group, &super_blk, in ext2fs_calculate_summary_stats()
2798 if (ext2fs_has_feature_meta_bg(fs->super)) in ext2fs_calculate_summary_stats()
2799 old_desc_blocks = fs->super->s_first_meta_bg; in ext2fs_calculate_summary_stats()
2801 old_desc_blocks = fs->desc_blocks + in ext2fs_calculate_summary_stats()
2802 fs->super->s_reserved_gdt_blocks; in ext2fs_calculate_summary_stats()
2806 ext2fs_free_blocks_count_set(fs->super, total_blocks_free); in ext2fs_calculate_summary_stats()
2816 uninit = ext2fs_bg_flags_test(fs, group, EXT2_BG_INODE_UNINIT); in ext2fs_calculate_summary_stats()
2817 for (ino = 1; ino <= fs->super->s_inodes_count && ino > 0; ino++) { in ext2fs_calculate_summary_stats()
2819 !ext2fs_fast_test_inode_bitmap2(fs->inode_map, ino)) { in ext2fs_calculate_summary_stats()
2824 if ((count == fs->super->s_inodes_per_group) || in ext2fs_calculate_summary_stats()
2825 (ino == fs->super->s_inodes_count)) { in ext2fs_calculate_summary_stats()
2826 ext2fs_bg_free_inodes_count_set(fs, group, group_free); in ext2fs_calculate_summary_stats()
2827 ext2fs_group_desc_csum_set(fs, group); in ext2fs_calculate_summary_stats()
2829 if (group >= fs->group_desc_count) in ext2fs_calculate_summary_stats()
2833 uninit = ext2fs_bg_flags_test(fs, group, EXT2_BG_INODE_UNINIT); in ext2fs_calculate_summary_stats()
2836 fs->super->s_free_inodes_count = total_inodes_free; in ext2fs_calculate_summary_stats()
2837 ext2fs_mark_super_dirty(fs); in ext2fs_calculate_summary_stats()
2845 static errcode_t fix_sb_journal_backup(ext2_filsys fs) in fix_sb_journal_backup() argument
2850 if (!ext2fs_has_feature_journal(fs->super)) in fix_sb_journal_backup()
2854 if (fs->super->s_journal_dev && !fs->super->s_journal_inum) in fix_sb_journal_backup()
2857 retval = ext2fs_read_inode(fs, fs->super->s_journal_inum, &inode); in fix_sb_journal_backup()
2860 memcpy(fs->super->s_jnl_blocks, inode.i_block, EXT2_N_BLOCKS*4); in fix_sb_journal_backup()
2861 fs->super->s_jnl_blocks[15] = inode.i_size_high; in fix_sb_journal_backup()
2862 fs->super->s_jnl_blocks[16] = inode.i_size; in fix_sb_journal_backup()
2863 fs->super->s_jnl_backup_type = EXT3_JNL_BACKUP_BLOCKS; in fix_sb_journal_backup()
2864 ext2fs_mark_super_dirty(fs); in fix_sb_journal_backup()
2868 static int calc_group_overhead(ext2_filsys fs, blk64_t grp, in calc_group_overhead() argument
2875 overhead = fs->inode_blocks_per_group + 2; in calc_group_overhead()
2877 ext2fs_super_and_bgd_loc2(fs, grp, &super_blk, in calc_group_overhead()
2892 blk64_t calculate_minimum_resize_size(ext2_filsys fs, int flags) in calculate_minimum_resize_size() argument
2900 int flexbg_size = 1 << fs->super->s_log_groups_per_flex; in calculate_minimum_resize_size()
2906 inode_count = fs->super->s_inodes_count - in calculate_minimum_resize_size()
2907 fs->super->s_free_inodes_count; in calculate_minimum_resize_size()
2909 fs->super->s_inodes_per_group) * in calculate_minimum_resize_size()
2910 (blk64_t) EXT2_BLOCKS_PER_GROUP(fs->super); in calculate_minimum_resize_size()
2912 EXT2_BLOCKS_PER_GROUP(fs->super)); in calculate_minimum_resize_size()
2922 if (ext2fs_has_feature_meta_bg(fs->super)) in calculate_minimum_resize_size()
2923 old_desc_blocks = fs->super->s_first_meta_bg; in calculate_minimum_resize_size()
2925 old_desc_blocks = fs->desc_blocks + in calculate_minimum_resize_size()
2926 fs->super->s_reserved_gdt_blocks; in calculate_minimum_resize_size()
2929 data_needed = ext2fs_blocks_count(fs->super) - in calculate_minimum_resize_size()
2930 ext2fs_free_blocks_count(fs->super); in calculate_minimum_resize_size()
2932 for (grp = 0; grp < fs->group_desc_count; grp++) in calculate_minimum_resize_size()
2933 data_needed -= calc_group_overhead(fs, grp, old_desc_blocks); in calculate_minimum_resize_size()
2945 if (ext2fs_has_feature_flex_bg(fs->super)) { in calculate_minimum_resize_size()
2949 if (flex_groups > fs->group_desc_count) in calculate_minimum_resize_size()
2950 flex_groups = fs->group_desc_count; in calculate_minimum_resize_size()
2957 data_blocks = EXT2_GROUPS_TO_BLOCKS(fs->super, groups); in calculate_minimum_resize_size()
2960 overhead = calc_group_overhead(fs, grp, old_desc_blocks); in calculate_minimum_resize_size()
2968 last_start += EXT2_BLOCKS_PER_GROUP(fs->super) - in calculate_minimum_resize_size()
2993 EXT2_BLOCKS_PER_GROUP(fs->super)); in calculate_minimum_resize_size()
2995 data_blocks += EXT2_GROUPS_TO_BLOCKS(fs->super, extra_grps); in calculate_minimum_resize_size()
2998 overhead = calc_group_overhead(fs, groups-1, old_desc_blocks); in calculate_minimum_resize_size()
2999 last_start += EXT2_BLOCKS_PER_GROUP(fs->super) - overhead; in calculate_minimum_resize_size()
3003 if (!ext2fs_has_feature_flex_bg(fs->super)) in calculate_minimum_resize_size()
3009 if (flex_groups > fs->group_desc_count) in calculate_minimum_resize_size()
3010 flex_groups = fs->group_desc_count; in calculate_minimum_resize_size()
3014 overhead = calc_group_overhead(fs, grp, in calculate_minimum_resize_size()
3022 last_start += EXT2_BLOCKS_PER_GROUP(fs->super) in calculate_minimum_resize_size()
3039 if (ext2fs_has_feature_flex_bg(fs->super) && in calculate_minimum_resize_size()
3044 overhead += calc_group_overhead(fs, grp, old_desc_blocks); in calculate_minimum_resize_size()
3076 overhead += fs->super->s_first_data_block; in calculate_minimum_resize_size()
3083 if (EXT2FS_CLUSTER_RATIO(fs) > 1) in calculate_minimum_resize_size()
3084 overhead += EXT2FS_CLUSTER_RATIO(fs) * 2; in calculate_minimum_resize_size()
3092 blks_needed = EXT2_GROUPS_TO_BLOCKS(fs->super, groups - 1); in calculate_minimum_resize_size()
3099 overhead = ext2fs_inode_table_loc(fs, groups-1) + in calculate_minimum_resize_size()
3100 fs->inode_blocks_per_group; in calculate_minimum_resize_size()
3113 if (blks_needed >= ext2fs_blocks_count(fs->super)) in calculate_minimum_resize_size()
3114 return ext2fs_blocks_count(fs->super); in calculate_minimum_resize_size()
3125 if (ext2fs_has_feature_extents(fs->super)) { in calculate_minimum_resize_size()
3126 blk64_t safe_margin = (ext2fs_blocks_count(fs->super) - in calculate_minimum_resize_size()
3128 unsigned int exts_per_blk = (fs->blocksize / in calculate_minimum_resize_size()