• Home
  • Raw
  • Download

Lines Matching refs:rfs

45 static errcode_t adjust_superblock(ext2_resize_t rfs, blk64_t new_size);
46 static errcode_t blocks_to_move(ext2_resize_t rfs);
47 static errcode_t block_mover(ext2_resize_t rfs);
48 static errcode_t inode_scan_and_fix(ext2_resize_t rfs);
49 static errcode_t inode_ref_fix(ext2_resize_t rfs);
50 static errcode_t move_itables(ext2_resize_t rfs);
56 static errcode_t clear_sparse_super2_last_group(ext2_resize_t rfs);
57 static errcode_t reserve_sparse_super2_last_group(ext2_resize_t rfs,
59 static errcode_t resize_group_descriptors(ext2_resize_t rfs, blk64_t new_size);
60 static errcode_t move_bg_metadata(ext2_resize_t rfs);
61 static errcode_t zero_high_bits_in_inodes(ext2_resize_t rfs);
98 errcode_t (*progress)(ext2_resize_t rfs, int pass, in resize_fs() argument
102 ext2_resize_t rfs; in resize_fs() local
109 retval = ext2fs_get_mem(sizeof(struct ext2_resize_struct), &rfs); in resize_fs()
113 memset(rfs, 0, sizeof(struct ext2_resize_struct)); in resize_fs()
114 fs->priv_data = rfs; in resize_fs()
115 rfs->old_fs = fs; in resize_fs()
116 rfs->flags = flags; in resize_fs()
117 rfs->itable_buf = 0; in resize_fs()
118 rfs->progress = progress; in resize_fs()
125 print_resource_track(rfs, &rtrack, fs->io); 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()
139 retval = resize_group_descriptors(rfs, *new_size); in resize_fs()
142 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
145 retval = move_bg_metadata(rfs); in resize_fs()
148 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
151 retval = zero_high_bits_in_inodes(rfs); in resize_fs()
154 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
157 retval = adjust_superblock(rfs, *new_size); in resize_fs()
160 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
163 fix_uninit_block_bitmaps(rfs->new_fs); in resize_fs()
164 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
166 ext2fs_bg_flags_clear(rfs->new_fs, rfs->new_fs->group_desc_count - 1, in resize_fs()
169 *new_size = ext2fs_blocks_count(rfs->new_fs->super); in resize_fs()
172 retval = blocks_to_move(rfs); in resize_fs()
175 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
178 if (rfs->flags & RESIZE_DEBUG_BMOVE) in resize_fs()
180 ext2fs_free_blocks_count(rfs->old_fs->super), in resize_fs()
181 ext2fs_free_blocks_count(rfs->new_fs->super), in resize_fs()
182 rfs->needed_blocks); in resize_fs()
186 retval = block_mover(rfs); in resize_fs()
189 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
192 retval = inode_scan_and_fix(rfs); in resize_fs()
195 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
198 retval = inode_ref_fix(rfs); in resize_fs()
201 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
204 retval = move_itables(rfs); in resize_fs()
207 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
209 retval = clear_sparse_super2_last_group(rfs); in resize_fs()
214 retval = ext2fs_calculate_summary_stats(rfs->new_fs); in resize_fs()
217 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
220 retval = fix_resize_inode(rfs->new_fs); in resize_fs()
223 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
226 retval = fix_sb_journal_backup(rfs->new_fs); in resize_fs()
229 print_resource_track(rfs, &rtrack, fs->io); in resize_fs()
231 retval = ext2fs_set_gdt_csum(rfs->new_fs); in resize_fs()
235 rfs->new_fs->super->s_state &= ~EXT2_ERROR_FS; in resize_fs()
236 rfs->new_fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY; in resize_fs()
238 print_resource_track(rfs, &overall_track, fs->io); in resize_fs()
239 retval = ext2fs_close_free(&rfs->new_fs); in resize_fs()
243 rfs->flags = flags; in resize_fs()
245 ext2fs_free(rfs->old_fs); in resize_fs()
246 rfs->old_fs = NULL; in resize_fs()
247 if (rfs->itable_buf) in resize_fs()
248 ext2fs_free_mem(&rfs->itable_buf); in resize_fs()
249 if (rfs->reserve_blocks) in resize_fs()
250 ext2fs_free_block_bitmap(rfs->reserve_blocks); in resize_fs()
251 if (rfs->move_blocks) in resize_fs()
252 ext2fs_free_block_bitmap(rfs->move_blocks); in resize_fs()
253 ext2fs_free_mem(&rfs); in resize_fs()
258 if (rfs->new_fs) { in resize_fs()
259 ext2fs_free(rfs->new_fs); in resize_fs()
260 rfs->new_fs = NULL; in resize_fs()
262 if (rfs->itable_buf) in resize_fs()
263 ext2fs_free_mem(&rfs->itable_buf); in resize_fs()
264 ext2fs_free_mem(&rfs); in resize_fs()
286 static errcode_t resize_group_descriptors(ext2_resize_t rfs, blk64_t new_size) in resize_group_descriptors() argument
293 if (!(rfs->flags & (RESIZE_DISABLE_64BIT | RESIZE_ENABLE_64BIT))) in resize_group_descriptors()
296 if (new_size != ext2fs_blocks_count(rfs->new_fs->super) || in resize_group_descriptors()
297 ext2fs_blocks_count(rfs->new_fs->super) >= (1ULL << 32) || in resize_group_descriptors()
298 (rfs->flags & RESIZE_DISABLE_64BIT && in resize_group_descriptors()
299 rfs->flags & RESIZE_ENABLE_64BIT)) in resize_group_descriptors()
302 if (rfs->flags & RESIZE_DISABLE_64BIT) { in resize_group_descriptors()
303 ext2fs_clear_feature_64bit(rfs->new_fs->super); in resize_group_descriptors()
304 rfs->new_fs->super->s_desc_size = EXT2_MIN_DESC_SIZE; in resize_group_descriptors()
305 } else if (rfs->flags & RESIZE_ENABLE_64BIT) { in resize_group_descriptors()
306 ext2fs_set_feature_64bit(rfs->new_fs->super); in resize_group_descriptors()
307 rfs->new_fs->super->s_desc_size = EXT2_MIN_DESC_SIZE_64BIT; in resize_group_descriptors()
310 if (EXT2_DESC_SIZE(rfs->old_fs->super) == in resize_group_descriptors()
311 EXT2_DESC_SIZE(rfs->new_fs->super)) in resize_group_descriptors()
314 o = rfs->new_fs->group_desc; in resize_group_descriptors()
315 rfs->new_fs->desc_blocks = ext2fs_div_ceil( in resize_group_descriptors()
316 rfs->old_fs->group_desc_count, in resize_group_descriptors()
317 EXT2_DESC_PER_BLOCK(rfs->new_fs->super)); in resize_group_descriptors()
318 retval = ext2fs_get_arrayzero(rfs->new_fs->desc_blocks, in resize_group_descriptors()
319 rfs->old_fs->blocksize, &new_group_desc); in resize_group_descriptors()
325 if (EXT2_DESC_SIZE(rfs->old_fs->super) <= in resize_group_descriptors()
326 EXT2_DESC_SIZE(rfs->new_fs->super)) in resize_group_descriptors()
327 copy_size = EXT2_DESC_SIZE(rfs->old_fs->super); in resize_group_descriptors()
329 copy_size = EXT2_DESC_SIZE(rfs->new_fs->super); in resize_group_descriptors()
330 for (i = 0; i < rfs->old_fs->group_desc_count; i++) { in resize_group_descriptors()
332 n = (char *)n + EXT2_DESC_SIZE(rfs->new_fs->super); in resize_group_descriptors()
333 o = (char *)o + EXT2_DESC_SIZE(rfs->old_fs->super); in resize_group_descriptors()
336 ext2fs_free_mem(&rfs->new_fs->group_desc); in resize_group_descriptors()
337 rfs->new_fs->group_desc = new_group_desc; in resize_group_descriptors()
339 for (i = 0; i < rfs->old_fs->group_desc_count; i++) in resize_group_descriptors()
340 ext2fs_group_desc_csum_set(rfs->new_fs, i); in resize_group_descriptors()
342 adjust_reserved_gdt_blocks(rfs->old_fs, rfs->new_fs); in resize_group_descriptors()
348 static errcode_t move_bg_metadata(ext2_resize_t rfs) in move_bg_metadata() argument
357 if (!(rfs->flags & (RESIZE_DISABLE_64BIT | RESIZE_ENABLE_64BIT))) in move_bg_metadata()
360 retval = ext2fs_allocate_block_bitmap(rfs->old_fs, "oldfs", &old_map); in move_bg_metadata()
364 retval = ext2fs_allocate_block_bitmap(rfs->new_fs, "newfs", &new_map); in move_bg_metadata()
368 if (ext2fs_has_feature_meta_bg(rfs->old_fs->super)) { in move_bg_metadata()
369 old_desc_blocks = rfs->old_fs->super->s_first_meta_bg; in move_bg_metadata()
370 new_desc_blocks = rfs->new_fs->super->s_first_meta_bg; in move_bg_metadata()
372 old_desc_blocks = rfs->old_fs->desc_blocks + in move_bg_metadata()
373 rfs->old_fs->super->s_reserved_gdt_blocks; in move_bg_metadata()
374 new_desc_blocks = rfs->new_fs->desc_blocks + in move_bg_metadata()
375 rfs->new_fs->super->s_reserved_gdt_blocks; in move_bg_metadata()
379 for (i = 0; i < rfs->old_fs->group_desc_count; i++) { in move_bg_metadata()
380 retval = ext2fs_super_and_bgd_loc2(rfs->old_fs, i, &b, &c, &d, in move_bg_metadata()
391 retval = ext2fs_super_and_bgd_loc2(rfs->new_fs, i, &b, &c, &d, in move_bg_metadata()
403 cluster_ratio = EXT2FS_CLUSTER_RATIO(rfs->new_fs); in move_bg_metadata()
406 for (b = EXT2FS_B2C(rfs->old_fs, in move_bg_metadata()
407 rfs->old_fs->super->s_first_data_block); in move_bg_metadata()
408 b < ext2fs_blocks_count(rfs->new_fs->super); in move_bg_metadata()
417 rfs->new_fs->block_map, b); in move_bg_metadata()
435 for (i = 0; i < rfs->old_fs->group_desc_count; i++) { in move_bg_metadata()
436 b = ext2fs_block_bitmap_loc(rfs->new_fs, i); in move_bg_metadata()
438 ext2fs_block_bitmap_loc_set(rfs->new_fs, i, 0); in move_bg_metadata()
442 b = ext2fs_inode_bitmap_loc(rfs->new_fs, i); in move_bg_metadata()
444 ext2fs_inode_bitmap_loc_set(rfs->new_fs, i, 0); in move_bg_metadata()
448 c = ext2fs_inode_table_loc(rfs->new_fs, i); in move_bg_metadata()
450 b < rfs->new_fs->inode_blocks_per_group; in move_bg_metadata()
453 ext2fs_inode_table_loc_set(rfs->new_fs, i, 0); in move_bg_metadata()
461 cluster_ratio > 1 && b < ext2fs_blocks_count(rfs->new_fs->super); in move_bg_metadata()
464 ext2fs_unmark_block_bitmap2(rfs->new_fs->block_map, b); in move_bg_metadata()
512 static errcode_t zero_high_bits_in_inodes(ext2_resize_t rfs) in zero_high_bits_in_inodes() argument
514 ext2_filsys fs = rfs->old_fs; in zero_high_bits_in_inodes()
521 if (!(rfs->flags & (RESIZE_DISABLE_64BIT | RESIZE_ENABLE_64BIT))) in zero_high_bits_in_inodes()
1025 static errcode_t adjust_superblock(ext2_resize_t rfs, blk64_t new_size) in adjust_superblock() argument
1027 ext2_filsys fs = rfs->new_fs; in adjust_superblock()
1039 &rfs->reserve_blocks); in adjust_superblock()
1043 retval = adjust_fs_info(fs, rfs->old_fs, rfs->reserve_blocks, new_size); in adjust_superblock()
1050 if ((rfs->old_fs->super->s_inodes_count - in adjust_superblock()
1051 rfs->old_fs->super->s_free_inodes_count) > in adjust_superblock()
1052 rfs->new_fs->super->s_inodes_count) { 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()
1090 &rfs->itable_buf); in adjust_superblock()
1094 memset(rfs->itable_buf, 0, fs->blocksize * fs->inode_blocks_per_group); in adjust_superblock()
1096 rfs->old_fs->group_desc_count); in adjust_superblock()
1097 adj = rfs->old_fs->group_desc_count; in adjust_superblock()
1099 if (rfs->progress) { in adjust_superblock()
1100 retval = rfs->progress(rfs, E2_RSZ_EXTEND_ITABLE_PASS, in adjust_superblock()
1105 for (i = rfs->old_fs->group_desc_count; in adjust_superblock()
1117 if (rfs->progress) { in adjust_superblock()
1118 retval = rfs->progress(rfs, E2_RSZ_EXTEND_ITABLE_PASS, in adjust_superblock()
1187 static void mark_fs_metablock(ext2_resize_t rfs, in mark_fs_metablock() argument
1191 ext2_filsys fs = rfs->new_fs; in mark_fs_metablock()
1193 ext2fs_mark_block_bitmap2(rfs->reserve_blocks, blk); in mark_fs_metablock()
1203 rfs->needed_blocks++; in mark_fs_metablock()
1208 rfs->needed_blocks++; in mark_fs_metablock()
1213 rfs->needed_blocks++; in mark_fs_metablock()
1219 for (i = 0; i < rfs->old_fs->group_desc_count; i++) { in mark_fs_metablock()
1222 rfs->needed_blocks++; in mark_fs_metablock()
1227 rfs->needed_blocks++; in mark_fs_metablock()
1232 rfs->needed_blocks++; in mark_fs_metablock()
1245 } else if (ext2fs_test_block_bitmap2(rfs->old_fs->block_map, blk) && in mark_fs_metablock()
1247 ext2fs_mark_block_bitmap2(rfs->move_blocks, blk); in mark_fs_metablock()
1248 rfs->needed_blocks++; in mark_fs_metablock()
1258 static errcode_t blocks_to_move(ext2_resize_t rfs) in blocks_to_move() argument
1272 fs = rfs->new_fs; in blocks_to_move()
1273 old_fs = rfs->old_fs; in blocks_to_move()
1275 fs = rfs->old_fs; in blocks_to_move()
1278 &rfs->move_blocks); in blocks_to_move()
1291 fs = rfs->new_fs; in blocks_to_move()
1347 ext2fs_mark_block_bitmap2(rfs->move_blocks, blk); in blocks_to_move()
1348 rfs->needed_blocks++; in blocks_to_move()
1350 ext2fs_mark_block_bitmap2(rfs->reserve_blocks, blk); in blocks_to_move()
1363 retval = reserve_sparse_super2_last_group(rfs, meta_bmap); in blocks_to_move()
1367 if (EXT2_DESC_SIZE(rfs->old_fs->super) == in blocks_to_move()
1368 EXT2_DESC_SIZE(rfs->new_fs->super) && in blocks_to_move()
1415 rfs->needed_blocks -= cluster_freed; in blocks_to_move()
1418 rfs->needed_blocks--; in blocks_to_move()
1436 mark_fs_metablock(rfs, meta_bmap, i, group_blk); in blocks_to_move()
1444 mark_fs_metablock(rfs, meta_bmap, in blocks_to_move()
1453 mark_fs_metablock(rfs, meta_bmap, i, in blocks_to_move()
1468 ext2fs_mark_block_bitmap2(rfs->reserve_blocks, in blocks_to_move()
1471 ext2fs_mark_block_bitmap2(rfs->reserve_blocks, in blocks_to_move()
1475 ext2fs_mark_block_bitmap2(rfs->reserve_blocks, in blocks_to_move()
1478 ext2fs_mark_block_bitmap2(rfs->reserve_blocks, in blocks_to_move()
1482 ext2fs_mark_block_bitmap_range2(rfs->reserve_blocks, in blocks_to_move()
1486 ext2fs_mark_block_bitmap_range2(rfs->reserve_blocks, in blocks_to_move()
1490 group_blk += rfs->new_fs->super->s_blocks_per_group; in blocks_to_move()
1501 rfs->reserve_blocks); in blocks_to_move()
1514 ext2fs_mark_block_bitmap2(rfs->move_blocks, in blocks_to_move()
1522 ext2fs_mark_block_bitmap2(rfs->move_blocks, in blocks_to_move()
1536 rfs->needed_blocks += fs->inode_blocks_per_group; in blocks_to_move()
1548 ext2fs_mark_block_bitmap2(rfs->move_blocks, in blocks_to_move()
1556 for (blk = ext2fs_inode_table_loc(rfs->old_fs, i), j=0; in blocks_to_move()
1558 ext2fs_mark_block_bitmap2(rfs->reserve_blocks, blk); in blocks_to_move()
1588 static void init_block_alloc(ext2_resize_t rfs) in init_block_alloc() argument
1590 rfs->alloc_state = AVOID_OLD; in init_block_alloc()
1591 rfs->new_blk = rfs->new_fs->super->s_first_data_block; in init_block_alloc()
1594 if (ext2fs_blocks_count(rfs->new_fs->super) > in init_block_alloc()
1595 ext2fs_blocks_count(rfs->old_fs->super)) in init_block_alloc()
1596 rfs->new_blk = ext2fs_blocks_count(rfs->old_fs->super); in init_block_alloc()
1600 static blk64_t get_new_block(ext2_resize_t rfs) in get_new_block() argument
1602 ext2_filsys fs = rfs->new_fs; in get_new_block()
1605 if (rfs->new_blk >= ext2fs_blocks_count(fs->super)) { in get_new_block()
1606 if (rfs->alloc_state == DESPERATION) in get_new_block()
1610 if (rfs->flags & RESIZE_DEBUG_BMOVE) in get_new_block()
1614 rfs->alloc_state = DESPERATION; 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()
1619 ext2fs_test_block_bitmap2(rfs->reserve_blocks, in get_new_block()
1620 rfs->new_blk) || in get_new_block()
1621 ((rfs->alloc_state == AVOID_OLD) && in get_new_block()
1622 (rfs->new_blk < ext2fs_blocks_count(rfs->old_fs->super)) && in get_new_block()
1623 ext2fs_test_block_bitmap2(rfs->old_fs->block_map, in get_new_block()
1624 rfs->new_blk))) { in get_new_block()
1625 rfs->new_blk++; in get_new_block()
1628 return rfs->new_blk; in get_new_block()
1636 ext2_resize_t rfs = (ext2_resize_t) fs->priv_data; in resize2fs_get_alloc_block() local
1640 blk = get_new_block(rfs); in resize2fs_get_alloc_block()
1645 if (rfs->flags & 0xF) in resize2fs_get_alloc_block()
1649 ext2fs_mark_block_bitmap2(rfs->old_fs->block_map, blk); in resize2fs_get_alloc_block()
1650 ext2fs_mark_block_bitmap2(rfs->new_fs->block_map, blk); in resize2fs_get_alloc_block()
1652 group = ext2fs_group_of_blk2(rfs->old_fs, blk); in resize2fs_get_alloc_block()
1653 ext2fs_clear_block_uninit(rfs->old_fs, group); in resize2fs_get_alloc_block()
1654 group = ext2fs_group_of_blk2(rfs->new_fs, blk); in resize2fs_get_alloc_block()
1655 ext2fs_clear_block_uninit(rfs->new_fs, group); in resize2fs_get_alloc_block()
1661 static errcode_t block_mover(ext2_resize_t rfs) in block_mover() argument
1664 ext2_filsys fs = rfs->new_fs; in block_mover()
1665 ext2_filsys old_fs = rfs->old_fs; in block_mover()
1680 if (!rfs->itable_buf) { in block_mover()
1683 &rfs->itable_buf); in block_mover()
1687 retval = ext2fs_create_extent_table(&rfs->bmap, 0); in block_mover()
1696 init_block_alloc(rfs); in block_mover()
1702 if (!ext2fs_test_block_bitmap2(rfs->move_blocks, blk)) in block_mover()
1710 new_blk = get_new_block(rfs); in block_mover()
1716 ext2fs_add_extent_entry(rfs->bmap, B2C(blk), B2C(new_blk)); in block_mover()
1721 if (rfs->bmap) { in block_mover()
1722 ext2fs_free_extent_table(rfs->bmap); in block_mover()
1723 rfs->bmap = 0; in block_mover()
1732 retval = ext2fs_iterate_extent(rfs->bmap, 0, 0, 0); in block_mover()
1735 if (rfs->progress) { in block_mover()
1736 retval = (rfs->progress)(rfs, E2_RSZ_BLOCK_RELOC_PASS, in block_mover()
1742 retval = ext2fs_iterate_extent(rfs->bmap, &old_blk, &new_blk, &size); in block_mover()
1750 if (rfs->flags & RESIZE_DEBUG_BMOVE) in block_mover()
1759 rfs->itable_buf); in block_mover()
1762 rfs->itable_buf); in block_mover()
1768 if (rfs->progress) { in block_mover()
1770 retval = (rfs->progress)(rfs, in block_mover()
1814 ext2_resize_t rfs; member
1836 if (pb->rfs->bmap) { in process_block()
1837 new_block = extent_translate(fs, pb->rfs->bmap, block); in process_block()
1843 if (pb->rfs->flags & RESIZE_DEBUG_BMOVE) in process_block()
1870 ext2_resize_t rfs = (ext2_resize_t) priv_data; in progress_callback() local
1880 if (rfs->progress) { in progress_callback()
1882 retval = (rfs->progress)(rfs, E2_RSZ_INODE_SCAN_PASS, in progress_callback()
1891 static errcode_t migrate_ea_block(ext2_resize_t rfs, ext2_ino_t ino, in migrate_ea_block() argument
1899 if (ext2fs_file_acl_block(rfs->old_fs, inode) == 0 || !rfs->bmap) in migrate_ea_block()
1901 new_block = extent_translate(rfs->old_fs, rfs->bmap, in migrate_ea_block()
1902 ext2fs_file_acl_block(rfs->old_fs, inode)); in migrate_ea_block()
1907 ext2fs_file_acl_block_set(rfs->old_fs, inode, new_block); in migrate_ea_block()
1910 if (ext2fs_has_feature_metadata_csum(rfs->new_fs->super)) { in migrate_ea_block()
1911 err = ext2fs_get_mem(rfs->old_fs->blocksize, &buf); in migrate_ea_block()
1914 rfs->old_fs->flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS; in migrate_ea_block()
1915 err = ext2fs_read_ext_attr3(rfs->old_fs, new_block, buf, ino); in migrate_ea_block()
1916 rfs->old_fs->flags &= ~EXT2_FLAG_IGNORE_CSUM_ERRORS; in migrate_ea_block()
1919 err = ext2fs_write_ext_attr3(rfs->old_fs, new_block, buf, ino); in migrate_ea_block()
2002 static errcode_t fix_ea_inode_refs(ext2_resize_t rfs, struct ext2_inode *inode, in fix_ea_inode_refs() argument
2005 ext2_filsys fs = rfs->new_fs; in fix_ea_inode_refs()
2035 modified = fix_ea_ibody_entries(rfs->imap, in fix_ea_inode_refs()
2052 modified = fix_ea_block_entries(rfs->imap, block_buf, in fix_ea_inode_refs()
2077 static errcode_t inode_scan_and_fix(ext2_resize_t rfs) in inode_scan_and_fix() argument
2089 if ((rfs->old_fs->group_desc_count <= in inode_scan_and_fix()
2090 rfs->new_fs->group_desc_count) && in inode_scan_and_fix()
2091 !rfs->bmap) in inode_scan_and_fix()
2096 retval = ext2fs_open_inode_scan(rfs->old_fs, 0, &scan); in inode_scan_and_fix()
2099 retval = ext2fs_init_dblist(rfs->old_fs, 0); in inode_scan_and_fix()
2101 retval = ext2fs_get_array(rfs->old_fs->blocksize, 3, &block_buf); in inode_scan_and_fix()
2104 start_to_move = (rfs->new_fs->group_desc_count * in inode_scan_and_fix()
2105 rfs->new_fs->super->s_inodes_per_group); in inode_scan_and_fix()
2107 if (rfs->progress) { in inode_scan_and_fix()
2108 retval = (rfs->progress)(rfs, E2_RSZ_INODE_SCAN_PASS, in inode_scan_and_fix()
2109 0, rfs->old_fs->group_desc_count); in inode_scan_and_fix()
2113 ext2fs_set_inode_callback(scan, progress_callback, (void *) rfs); in inode_scan_and_fix()
2114 pb.rfs = rfs; in inode_scan_and_fix()
2117 new_inode = EXT2_FIRST_INODE(rfs->new_fs->super); in inode_scan_and_fix()
2118 inode_size = EXT2_INODE_SIZE(rfs->new_fs->super); in inode_scan_and_fix()
2141 retval = migrate_ea_block(rfs, ino, inode, &pb.changed); in inode_scan_and_fix()
2154 retval = ext2fs_new_inode(rfs->new_fs, 0, 0, 0, &new_inode); in inode_scan_and_fix()
2158 ext2fs_inode_alloc_stats2(rfs->new_fs, new_inode, +1, in inode_scan_and_fix()
2169 retval = ext2fs_write_inode_full(rfs->old_fs, new_inode, in inode_scan_and_fix()
2176 if (rfs->flags & RESIZE_DEBUG_INODEMAP) in inode_scan_and_fix()
2179 if (!rfs->imap) { in inode_scan_and_fix()
2180 retval = ext2fs_create_extent_table(&rfs->imap, 0); in inode_scan_and_fix()
2184 ext2fs_add_extent_entry(rfs->imap, ino, new_inode); in inode_scan_and_fix()
2188 retval = ext2fs_write_inode_full(rfs->old_fs, in inode_scan_and_fix()
2199 rfs->old_fs->flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS; in inode_scan_and_fix()
2200 if (ext2fs_inode_has_valid_blocks2(rfs->old_fs, inode) && in inode_scan_and_fix()
2201 (rfs->bmap || pb.is_dir)) { in inode_scan_and_fix()
2205 retval = ext2fs_block_iterate3(rfs->old_fs, in inode_scan_and_fix()
2215 (rfs->bmap || pb.is_dir)) { in inode_scan_and_fix()
2217 retval = ext2fs_add_dir_block2(rfs->old_fs->dblist, in inode_scan_and_fix()
2224 if (ext2fs_has_feature_metadata_csum(rfs->old_fs->super) && in inode_scan_and_fix()
2226 retval = ext2fs_fix_extents_checksums(rfs->old_fs, in inode_scan_and_fix()
2234 ext2fs_has_feature_ea_inode(rfs->new_fs->super)) { in inode_scan_and_fix()
2235 retval = fix_ea_inode_refs(rfs, inode, block_buf, in inode_scan_and_fix()
2240 io_channel_flush(rfs->old_fs->io); in inode_scan_and_fix()
2244 rfs->old_fs->flags &= ~EXT2_FLAG_IGNORE_CSUM_ERRORS; in inode_scan_and_fix()
2245 if (rfs->bmap) { in inode_scan_and_fix()
2246 ext2fs_free_extent_table(rfs->bmap); in inode_scan_and_fix()
2247 rfs->bmap = 0; in inode_scan_and_fix()
2265 ext2_resize_t rfs; member
2284 if (is->rfs->progress && offset == 0) { in check_and_change_inodes()
2285 io_channel_flush(is->rfs->old_fs->io); in check_and_change_inodes()
2286 is->err = (is->rfs->progress)(is->rfs, in check_and_change_inodes()
2297 if (ext2fs_has_feature_metadata_csum(is->rfs->old_fs->super) && in check_and_change_inodes()
2298 !ext2fs_test_inode_bitmap2(is->rfs->old_fs->inode_map, dir)) in check_and_change_inodes()
2304 new_inode = ext2fs_extent_translate(is->rfs->imap, dirent->inode); in check_and_change_inodes()
2309 if (is->rfs->flags & RESIZE_DEBUG_INODEMAP) in check_and_change_inodes()
2318 retval = ext2fs_read_inode(is->rfs->old_fs, dir, &inode); in check_and_change_inodes()
2321 is->err = ext2fs_write_inode(is->rfs->old_fs, dir, &inode); in check_and_change_inodes()
2329 static errcode_t inode_ref_fix(ext2_resize_t rfs) in inode_ref_fix() argument
2334 if (!rfs->imap) in inode_ref_fix()
2342 is.max_dirs = ext2fs_dblist_count2(rfs->old_fs->dblist); in inode_ref_fix()
2343 is.rfs = rfs; in inode_ref_fix()
2346 if (rfs->progress) { in inode_ref_fix()
2347 retval = (rfs->progress)(rfs, E2_RSZ_INODE_REF_UPD_PASS, in inode_ref_fix()
2353 rfs->old_fs->flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS; in inode_ref_fix()
2354 retval = ext2fs_dblist_dir_iterate(rfs->old_fs->dblist, in inode_ref_fix()
2357 rfs->old_fs->flags &= ~EXT2_FLAG_IGNORE_CSUM_ERRORS; in inode_ref_fix()
2365 if (rfs->progress && (is.num < is.max_dirs)) in inode_ref_fix()
2366 (rfs->progress)(rfs, E2_RSZ_INODE_REF_UPD_PASS, in inode_ref_fix()
2370 ext2fs_free_extent_table(rfs->imap); in inode_ref_fix()
2371 rfs->imap = 0; in inode_ref_fix()
2396 static errcode_t move_itables(ext2_resize_t rfs) in move_itables() argument
2401 ext2_filsys fs = rfs->new_fs; in move_itables()
2410 if (max_groups > rfs->old_fs->group_desc_count) in move_itables()
2411 max_groups = rfs->old_fs->group_desc_count; in move_itables()
2414 if (!rfs->itable_buf) { in move_itables()
2415 retval = ext2fs_get_mem(size, &rfs->itable_buf); in move_itables()
2436 if (ext2fs_inode_table_loc(rfs->old_fs, i) != in move_itables()
2445 if (rfs->progress) { in move_itables()
2446 retval = rfs->progress(rfs, E2_RSZ_MOVE_ITABLE_PASS, in move_itables()
2452 rfs->old_fs->flags |= EXT2_FLAG_MASTER_SB_ONLY; in move_itables()
2455 old_blk = ext2fs_inode_table_loc(rfs->old_fs, i); in move_itables()
2460 if (rfs->flags & RESIZE_DEBUG_ITABLEMOVE) in move_itables()
2472 rfs->itable_buf); in move_itables()
2482 for (cp = rfs->itable_buf+size-1, n=0; n < size; n++, cp--) in move_itables()
2487 if (rfs->flags & RESIZE_DEBUG_ITABLEMOVE) in move_itables()
2495 num, rfs->itable_buf); in move_itables()
2498 num, rfs->itable_buf); in move_itables()
2504 diff, (rfs->itable_buf + in move_itables()
2511 for (blk = ext2fs_inode_table_loc(rfs->old_fs, i), j=0; in move_itables()
2526 ext2fs_inode_table_loc_set(rfs->old_fs, i, new_blk); in move_itables()
2527 ext2fs_group_desc_csum_set(rfs->old_fs, i); in move_itables()
2528 ext2fs_mark_super_dirty(rfs->old_fs); in move_itables()
2529 ext2fs_flush(rfs->old_fs); in move_itables()
2531 if (rfs->progress) { in move_itables()
2532 retval = rfs->progress(rfs, E2_RSZ_MOVE_ITABLE_PASS, in move_itables()
2541 if (rfs->flags & RESIZE_DEBUG_ITABLEMOVE) in move_itables()
2557 static errcode_t clear_sparse_super2_last_group(ext2_resize_t rfs) in clear_sparse_super2_last_group() argument
2559 ext2_filsys fs = rfs->new_fs; in clear_sparse_super2_last_group()
2560 ext2_filsys old_fs = rfs->old_fs; in clear_sparse_super2_last_group()
2562 dgrp_t old_last_bg = rfs->old_fs->group_desc_count - 1; in clear_sparse_super2_last_group()
2588 retval = ext2fs_super_and_bgd_loc2(rfs->old_fs, old_last_bg, in clear_sparse_super2_last_group()
2607 static errcode_t reserve_sparse_super2_last_group(ext2_resize_t rfs, in reserve_sparse_super2_last_group() argument
2610 ext2_filsys fs = rfs->new_fs; in reserve_sparse_super2_last_group()
2611 ext2_filsys old_fs = rfs->old_fs; in reserve_sparse_super2_last_group()
2613 dgrp_t old_last_bg = rfs->old_fs->group_desc_count - 1; in reserve_sparse_super2_last_group()
2638 retval = ext2fs_super_and_bgd_loc2(rfs->new_fs, last_bg, in reserve_sparse_super2_last_group()
2688 ext2fs_mark_block_bitmap2(rfs->move_blocks, blk); in reserve_sparse_super2_last_group()
2689 rfs->needed_blocks++; in reserve_sparse_super2_last_group()
2691 ext2fs_mark_block_bitmap2(rfs->reserve_blocks, blk); in reserve_sparse_super2_last_group()