Lines Matching full:fs
119 errcode_t ext2fs_run_ext3_journal(ext2_filsys *fs);
251 static int remove_journal_device(ext2_filsys fs) in remove_journal_device() argument
265 uuid_unparse(fs->super->s_journal_uuid, buf); in remove_journal_device()
270 ext2fs_find_block_device(fs->super->s_journal_dev); in remove_journal_device()
284 fs->blocksize, io_ptr, &jfs); in remove_journal_device()
308 if (!journal_user(fs->super->s_uuid, jsb->s_users, nr_users)) { in remove_journal_device()
321 ext2fs_journal_sb_start(fs->blocksize), in remove_journal_device()
338 fs->super->s_journal_dev = 0; in remove_journal_device()
339 memset(fs->super->s_jnl_blocks, 0, sizeof(fs->super->s_jnl_blocks)); in remove_journal_device()
340 uuid_clear(fs->super->s_journal_uuid); in remove_journal_device()
341 ext2fs_mark_super_dirty(fs); in remove_journal_device()
349 static int release_blocks_proc(ext2_filsys fs, blk64_t *blocknr, in release_blocks_proc() argument
359 ext2fs_unmark_block_bitmap2(fs->block_map, block); in release_blocks_proc()
360 group = ext2fs_group_of_blk2(fs, block); in release_blocks_proc()
361 ext2fs_bg_free_blocks_count_set(fs, group, ext2fs_bg_free_blocks_count(fs, group) + 1); in release_blocks_proc()
362 ext2fs_group_desc_csum_set(fs, group); in release_blocks_proc()
363 ext2fs_free_blocks_count_add(fs->super, EXT2FS_CLUSTER_RATIO(fs)); in release_blocks_proc()
370 static errcode_t remove_journal_inode(ext2_filsys fs) in remove_journal_inode() argument
374 ext2_ino_t ino = fs->super->s_journal_inum; in remove_journal_inode()
376 retval = ext2fs_read_inode(fs, ino, &inode); in remove_journal_inode()
383 retval = ext2fs_read_bitmaps(fs); in remove_journal_inode()
389 retval = ext2fs_block_iterate3(fs, ino, in remove_journal_inode()
397 fs->super->s_overhead_clusters -= in remove_journal_inode()
398 EXT2FS_NUM_B2C(fs, EXT2_I_SIZE(&inode) / fs->blocksize); in remove_journal_inode()
400 ext2fs_mark_bb_dirty(fs); in remove_journal_inode()
401 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in remove_journal_inode()
404 retval = ext2fs_write_inode(fs, ino, &inode); in remove_journal_inode()
410 fs->super->s_journal_inum = 0; in remove_journal_inode()
411 memset(fs->super->s_jnl_blocks, 0, sizeof(fs->super->s_jnl_blocks)); in remove_journal_inode()
412 ext2fs_mark_super_dirty(fs); in remove_journal_inode()
420 static int update_mntopts(ext2_filsys fs, char *mntopts) in update_mntopts() argument
422 struct ext2_super_block *sb = fs->super; in update_mntopts()
429 ext2fs_mark_super_dirty(fs); in update_mntopts()
434 static int check_fsck_needed(ext2_filsys fs, const char *prompt) in check_fsck_needed() argument
437 if (!(fs->super->s_state & EXT2_VALID_FS) || in check_fsck_needed()
438 (fs->super->s_state & EXT2_ERROR_FS) || in check_fsck_needed()
439 (fs->super->s_lastcheck < fs->super->s_mtime)) { in check_fsck_needed()
457 static void request_dir_fsck_afterwards(ext2_filsys fs) in request_dir_fsck_afterwards() argument
464 fs->super->s_state &= ~EXT2_VALID_FS; in request_dir_fsck_afterwards()
471 static void request_fsck_afterwards(ext2_filsys fs) in request_fsck_afterwards() argument
478 fs->super->s_state &= ~EXT2_VALID_FS; in request_fsck_afterwards()
484 static void convert_64bit(ext2_filsys fs, int direction) in convert_64bit() argument
491 ((fs->super->s_state & EXT2_ERROR_FS) || in convert_64bit()
492 !(fs->super->s_state & EXT2_VALID_FS) || in convert_64bit()
493 fs->super->s_lastcheck < fs->super->s_mtime)) in convert_64bit()
494 request_fsck_afterwards(fs); in convert_64bit()
497 direction > 0 ? "-b" : "-s", fs->device_name); in convert_64bit()
500 direction > 0 ? "-b" : "-s", fs->device_name); in convert_64bit()
521 static int rewrite_dir_block(ext2_filsys fs, in rewrite_dir_block() argument
532 ctx->errcode = ext2fs_read_dir_block4(fs, *blocknr, ctx->buf, 0, in rewrite_dir_block()
544 ext2fs_get_dx_countlimit(fs, (struct ext2_dir_entry *)ctx->buf, in rewrite_dir_block()
547 if (!ext2fs_has_feature_metadata_csum(fs->super)) { in rewrite_dir_block()
549 int max_entries = (fs->blocksize - dcl_offset) / in rewrite_dir_block()
559 request_dir_fsck_afterwards(fs); in rewrite_dir_block()
566 int max_entries = (fs->blocksize - (dcl_offset + in rewrite_dir_block()
576 char *top = ctx->buf + fs->blocksize; in rewrite_dir_block()
584 ctx->errcode = ext2fs_get_rec_len(fs, de, &rec_len); in rewrite_dir_block()
591 ctx->errcode = ext2fs_get_rec_len(fs, last_de, &rec_len); in rewrite_dir_block()
596 if (!ext2fs_has_feature_metadata_csum(fs->super)) { in rewrite_dir_block()
607 ctx->errcode = ext2fs_get_rec_len(fs, penultimate_de, in rewrite_dir_block()
613 ext2fs_set_rec_len(fs, rec_len + in rewrite_dir_block()
637 request_dir_fsck_afterwards(fs); in rewrite_dir_block()
641 ext2fs_set_rec_len(fs, rec_len - csum_size, last_de); in rewrite_dir_block()
642 t = EXT2_DIRENT_TAIL(ctx->buf, fs->blocksize); in rewrite_dir_block()
643 ext2fs_initialize_dirent_tail(fs, t); in rewrite_dir_block()
654 ctx->errcode = ext2fs_write_dir_block4(fs, *blocknr, ctx->buf, in rewrite_dir_block()
662 static errcode_t rewrite_directory(ext2_filsys fs, ext2_ino_t dir, in rewrite_directory() argument
668 retval = ext2fs_get_mem(fs->blocksize, &ctx.buf); in rewrite_directory()
673 ctx.clear_htree = !ext2fs_has_feature_dir_index(fs->super); in rewrite_directory()
676 retval = ext2fs_block_iterate3(fs, dir, BLOCK_FLAG_READ_ONLY | in rewrite_directory()
686 retval = ext2fs_write_inode(fs, dir, inode); in rewrite_directory()
699 ext2_filsys fs; member
718 retval = ext2fs_file_open(ctx->fs, ino, 0, &file); in update_ea_inode_hash()
729 hash = ext2fs_crc32c_le(ctx->fs->csum_seed, in update_ea_inode_hash()
734 static int update_xattr_entry_hashes(ext2_filsys fs, in update_xattr_entry_hashes() argument
743 retval = ext2fs_ext_attr_hash_entry2(fs, entry, NULL, in update_xattr_entry_hashes()
775 update_xattr_entry_hashes(ctx->fs, start, end); in update_inline_xattr_hashes()
789 end = (struct ext2_ext_attr_entry *)(block_buf + ctx->fs->blocksize); in update_block_xattr_hashes()
791 if (update_xattr_entry_hashes(ctx->fs, start, end)) in update_block_xattr_hashes()
801 if (!ext2fs_test_inode_bitmap2(ctx->fs->inode_map, ino)) { in rewrite_one_inode()
814 retval = ext2fs_write_inode_full(ctx->fs, ino, inode, ctx->inode_size); in rewrite_one_inode()
818 retval = ext2fs_fix_extents_checksums(ctx->fs, ino, inode); in rewrite_one_inode()
823 ext2fs_inode_has_valid_blocks2(ctx->fs, inode)) { in rewrite_one_inode()
824 retval = rewrite_directory(ctx->fs, ino, inode); in rewrite_one_inode()
829 file_acl_block = ext2fs_file_acl_block(ctx->fs, inode); in rewrite_one_inode()
833 retval = ext2fs_read_ext_attr3(ctx->fs, file_acl_block, ctx->ea_buf, in rewrite_one_inode()
839 retval = ext2fs_write_ext_attr3(ctx->fs, file_acl_block, ctx->ea_buf, in rewrite_one_inode()
862 retval = ext2fs_open_inode_scan(ctx->fs, 0, &scan); in rewrite_inodes_pass()
895 static void rewrite_inodes(ext2_filsys fs, unsigned int flags) in rewrite_inodes() argument
898 .fs = fs, in rewrite_inodes()
899 .inode_size = EXT2_INODE_SIZE(fs->super), in rewrite_inodes()
903 if (fs->super->s_creator_os == EXT2_OS_HURD) in rewrite_inodes()
924 if (ext2fs_has_feature_ea_inode(fs->super) && (flags & REWRITE_EA_FL)) in rewrite_inodes()
933 static errcode_t rewrite_metadata_checksums(ext2_filsys fs, unsigned int flags) in rewrite_metadata_checksums() argument
938 fs->flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS; in rewrite_metadata_checksums()
939 ext2fs_init_csum_seed(fs); in rewrite_metadata_checksums()
940 for (i = 0; i < fs->group_desc_count; i++) in rewrite_metadata_checksums()
941 ext2fs_group_desc_csum_set(fs, i); in rewrite_metadata_checksums()
942 retval = ext2fs_read_bitmaps(fs); in rewrite_metadata_checksums()
945 rewrite_inodes(fs, flags); in rewrite_metadata_checksums()
946 ext2fs_mark_ib_dirty(fs); in rewrite_metadata_checksums()
947 ext2fs_mark_bb_dirty(fs); in rewrite_metadata_checksums()
948 retval = ext2fs_mmp_update2(fs, 1); in rewrite_metadata_checksums()
951 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in rewrite_metadata_checksums()
952 fs->flags &= ~EXT2_FLAG_IGNORE_CSUM_ERRORS; in rewrite_metadata_checksums()
953 if (ext2fs_has_feature_metadata_csum(fs->super)) in rewrite_metadata_checksums()
954 fs->super->s_checksum_type = EXT2_CRC32C_CHKSUM; in rewrite_metadata_checksums()
956 fs->super->s_checksum_type = 0; in rewrite_metadata_checksums()
957 ext2fs_mark_super_dirty(fs); in rewrite_metadata_checksums()
961 static void enable_uninit_bg(ext2_filsys fs) in enable_uninit_bg() argument
966 for (i = 0; i < fs->group_desc_count; i++) { in enable_uninit_bg()
967 gd = ext2fs_group_desc(fs, fs->group_desc, i); in enable_uninit_bg()
970 ext2fs_group_desc_csum_set(fs, i); in enable_uninit_bg()
972 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in enable_uninit_bg()
975 static errcode_t zero_empty_inodes(ext2_filsys fs) in zero_empty_inodes() argument
977 int length = EXT2_INODE_SIZE(fs->super); in zero_empty_inodes()
983 retval = ext2fs_open_inode_scan(fs, 0, &scan); in zero_empty_inodes()
997 if (!ext2fs_test_inode_bitmap2(fs->inode_map, ino)) { in zero_empty_inodes()
999 retval = ext2fs_write_inode_full(fs, ino, inode, in zero_empty_inodes()
1012 static errcode_t disable_uninit_bg(ext2_filsys fs, __u32 csum_feature_flag) in disable_uninit_bg() argument
1020 fs->super->s_feature_ro_compat |= csum_feature_flag; in disable_uninit_bg()
1021 retval = ext2fs_read_bitmaps(fs); in disable_uninit_bg()
1022 fs->super->s_feature_ro_compat &= ~csum_feature_flag; in disable_uninit_bg()
1026 request_fsck_afterwards(fs); in disable_uninit_bg()
1029 ext2fs_mark_ib_dirty(fs); in disable_uninit_bg()
1030 ext2fs_mark_bb_dirty(fs); in disable_uninit_bg()
1034 retval = zero_empty_inodes(fs); in disable_uninit_bg()
1038 request_fsck_afterwards(fs); in disable_uninit_bg()
1044 for (i = 0; i < fs->group_desc_count; i++) { in disable_uninit_bg()
1045 b = ext2fs_block_bitmap_loc(fs, i); in disable_uninit_bg()
1046 ext2fs_mark_block_bitmap2(fs->block_map, b); in disable_uninit_bg()
1047 b = ext2fs_inode_bitmap_loc(fs, i); in disable_uninit_bg()
1048 ext2fs_mark_block_bitmap2(fs->block_map, b); in disable_uninit_bg()
1050 retval = ext2fs_super_and_bgd_loc2(fs, i, &b, &c, &d, NULL); in disable_uninit_bg()
1052 ext2fs_mark_block_bitmap2(fs->block_map, b); in disable_uninit_bg()
1054 ext2fs_mark_block_bitmap2(fs->block_map, c); in disable_uninit_bg()
1056 ext2fs_mark_block_bitmap2(fs->block_map, d); in disable_uninit_bg()
1060 request_fsck_afterwards(fs); in disable_uninit_bg()
1063 gd = ext2fs_group_desc(fs, fs->group_desc, i); in disable_uninit_bg()
1066 ext2fs_group_desc_csum_set(fs, i); in disable_uninit_bg()
1068 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in disable_uninit_bg()
1069 ext2fs_mark_super_dirty(fs); in disable_uninit_bg()
1077 if (access("/sys/fs/ext4/features/metadata_csum_seed", R_OK)) in try_confirm_csum_seed_support()
1086 static int update_feature_set(ext2_filsys fs, char *features) in update_feature_set() argument
1088 struct ext2_super_block *sb = fs->super; in update_feature_set()
1143 if (remove_journal_inode(fs)) in update_feature_set()
1147 if (remove_journal_device(fs)) in update_feature_set()
1174 error = ext2fs_mmp_init(fs); in update_feature_set()
1184 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in update_feature_set()
1201 error = ext2fs_read_bitmaps(fs); in update_feature_set()
1207 error = ext2fs_mmp_read(fs, sb->s_mmp_block, NULL); in update_feature_set()
1209 struct mmp_struct *mmp_cmp = fs->mmp_cmp; in update_feature_set()
1222 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in update_feature_set()
1223 ext2fs_block_alloc_stats2(fs, sb->s_mmp_block, -1); in update_feature_set()
1249 if (check_fsck_needed(fs, in update_feature_set()
1266 if (ext2fs_check_desc(fs)) { in update_feature_set()
1288 if (check_fsck_needed(fs, in update_feature_set()
1296 if (!ext2fs_has_feature_extents(fs->super)) in update_feature_set()
1303 if (!ext2fs_has_feature_64bit(fs->super)) in update_feature_set()
1311 ext2fs_clear_feature_gdt_csum(fs->super); in update_feature_set()
1316 enable_uninit_bg(fs); in update_feature_set()
1330 if (check_fsck_needed(fs, in update_feature_set()
1348 ext2fs_set_feature_gdt_csum(fs->super); in update_feature_set()
1354 if (!ext2fs_has_feature_gdt_csum(fs->super)) { in update_feature_set()
1355 err = disable_uninit_bg(fs, in update_feature_set()
1368 fs->super->s_checksum_seed = 0; in update_feature_set()
1369 ext2fs_clear_feature_csum_seed(fs->super); in update_feature_set()
1381 if (ext2fs_has_feature_metadata_csum(fs->super)) in update_feature_set()
1382 ext2fs_clear_feature_gdt_csum(fs->super); in update_feature_set()
1384 enable_uninit_bg(fs); in update_feature_set()
1395 err = disable_uninit_bg(fs, in update_feature_set()
1448 if (fs->super->s_inode_size == EXT2_GOOD_OLD_INODE_SIZE) { in update_feature_set()
1479 fs->super->s_encrypt_algos[0] = in update_feature_set()
1481 fs->super->s_encrypt_algos[1] = in update_feature_set()
1491 fs->super->s_encoding = EXT4_ENC_UTF8_12_1; in update_feature_set()
1492 fs->super->s_encoding_flags = e2p_get_encoding_flags(EXT4_ENC_UTF8_12_1); in update_feature_set()
1506 fs->super->s_checksum_seed = fs->csum_seed; in update_feature_set()
1513 uuid_seed = ext2fs_crc32c_le(~0, fs->super->s_uuid, in update_feature_set()
1514 sizeof(fs->super->s_uuid)); in update_feature_set()
1515 if (fs->super->s_checksum_seed != uuid_seed) { in update_feature_set()
1523 if (check_fsck_needed(fs, _("Recalculating checksums " in update_feature_set()
1533 ext2fs_update_dynamic_rev(fs); in update_feature_set()
1545 request_fsck_afterwards(fs); in update_feature_set()
1550 ext2fs_mark_super_dirty(fs); in update_feature_set()
1558 static int add_journal(ext2_filsys fs) in add_journal() argument
1565 if (ext2fs_has_feature_journal(fs->super)) { in add_journal()
1583 fs->blocksize, io_ptr, &jfs); in add_journal()
1594 retval = ext2fs_add_journal_device(fs, jfs); in add_journal()
1606 figure_journal_size(&jparams, journal_size, journal_fc_size, fs); in add_journal()
1611 fs->super->s_log_block_size); in add_journal()
1612 retval = ext2fs_add_journal_inode3(fs, &jparams, in add_journal()
1621 fs->super->s_overhead_clusters += EXT2FS_NUM_B2C(fs, in add_journal()
1623 ext2fs_mark_super_dirty(fs); in add_journal()
1631 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in add_journal()
1633 print_check_message(fs->super->s_max_mnt_count, in add_journal()
1634 fs->super->s_checkinterval); in add_journal()
1642 static int handle_quota_options(ext2_filsys fs) in handle_quota_options() argument
1659 fs->super->s_inode_size == EXT2_GOOD_OLD_INODE_SIZE) { in handle_quota_options()
1670 retval = quota_init_context(&qctx, fs, qtype_bits); in handle_quota_options()
1682 *quota_sb_inump(fs->super, qtype) == 0) { in handle_quota_options()
1683 if ((qf_ino = quota_file_exists(fs, qtype)) > 0) { in handle_quota_options()
1704 if (!ext2fs_has_feature_quota(fs->super)) { in handle_quota_options()
1705 ext2fs_set_feature_quota(fs->super); in handle_quota_options()
1709 !ext2fs_has_feature_project(fs->super)) { in handle_quota_options()
1710 ext2fs_set_feature_project(fs->super); in handle_quota_options()
1714 retval = quota_remove_inode(fs, qtype); in handle_quota_options()
1722 ext2fs_clear_feature_project(fs->super); in handle_quota_options()
1732 if (*quota_sb_inump(fs->super, qtype)) in handle_quota_options()
1735 ext2fs_clear_feature_quota(fs->super); in handle_quota_options()
1741 ext2fs_mark_super_dirty(fs); in handle_quota_options()
2110 static int parse_extended_opts(ext2_filsys fs, const char *opts) in parse_extended_opts() argument
2112 struct ext2_super_block *sb = fs->super; in parse_extended_opts()
2171 ext2fs_mark_super_dirty(fs); in parse_extended_opts()
2175 ext2fs_mark_super_dirty(fs); in parse_extended_opts()
2179 ext2fs_mark_super_dirty(fs); in parse_extended_opts()
2183 ext2fs_mark_super_dirty(fs); in parse_extended_opts()
2231 ext2fs_mark_super_dirty(fs); in parse_extended_opts()
2237 if (strlen(arg) >= sizeof(fs->super->s_mount_opts)) { in parse_extended_opts()
2294 ext2fs_mark_super_dirty(fs); in parse_extended_opts()
2329 static int get_move_bitmaps(ext2_filsys fs, int new_ino_blks_per_grp, in get_move_bitmaps() argument
2338 retval = ext2fs_read_bb_inode(fs, &bb_list); in get_move_bitmaps()
2342 for (i = 0; i < fs->group_desc_count; i++) { in get_move_bitmaps()
2343 start_blk = ext2fs_inode_table_loc(fs, i) + in get_move_bitmaps()
2344 fs->inode_blocks_per_group; in get_move_bitmaps()
2346 end_blk = ext2fs_inode_table_loc(fs, i) + in get_move_bitmaps()
2350 if (ext2fs_test_block_bitmap2(fs->block_map, j)) { in get_move_bitmaps()
2365 ext2fs_mark_block_bitmap2(fs->block_map, j); in get_move_bitmaps()
2372 if (needed_blocks > ext2fs_free_blocks_count(fs->super)) in get_move_bitmaps()
2378 static int ext2fs_is_meta_block(ext2_filsys fs, blk64_t blk) in ext2fs_is_meta_block() argument
2381 group = ext2fs_group_of_blk2(fs, blk); in ext2fs_is_meta_block()
2382 if (ext2fs_block_bitmap_loc(fs, group) == blk) in ext2fs_is_meta_block()
2384 if (ext2fs_inode_bitmap_loc(fs, group) == blk) in ext2fs_is_meta_block()
2389 static int ext2fs_is_block_in_group(ext2_filsys fs, dgrp_t group, blk64_t blk) in ext2fs_is_block_in_group() argument
2392 start_blk = fs->super->s_first_data_block + in ext2fs_is_block_in_group()
2393 EXT2_GROUPS_TO_BLOCKS(fs->super, group); in ext2fs_is_block_in_group()
2398 end_blk = start_blk + EXT2_BLOCKS_PER_GROUP(fs->super); in ext2fs_is_block_in_group()
2404 static int move_block(ext2_filsys fs, ext2fs_block_bitmap bmap) in move_block() argument
2414 retval = ext2fs_get_mem(fs->blocksize, &buf); in move_block()
2418 for (new_blk = blk = fs->super->s_first_data_block; in move_block()
2419 blk < ext2fs_blocks_count(fs->super); blk++) { in move_block()
2423 if (ext2fs_is_meta_block(fs, blk)) { in move_block()
2425 * If the block is mapping a fs meta data block in move_block()
2428 * the respective fs metadata pointers. Otherwise in move_block()
2431 group = ext2fs_group_of_blk2(fs, blk); in move_block()
2432 goal = ext2fs_group_first_block2(fs, group); in move_block()
2438 retval = ext2fs_new_block2(fs, goal, NULL, &new_blk); in move_block()
2442 /* new fs meta data block should be in the same group */ in move_block()
2443 if (meta_data && !ext2fs_is_block_in_group(fs, group, new_blk)) { in move_block()
2449 ext2fs_mark_block_bitmap2(fs->block_map, new_blk); in move_block()
2461 retval = io_channel_read_blk64(fs->io, blk, 1, buf); in move_block()
2465 retval = io_channel_write_blk64(fs->io, new_blk, 1, buf); in move_block()
2489 static int process_block(ext2_filsys fs EXT2FS_ATTR((unused)), in process_block()
2514 static int inode_scan_and_fix(ext2_filsys fs, ext2fs_block_bitmap bmap) in inode_scan_and_fix() argument
2523 retval = ext2fs_get_mem(fs->blocksize * 3, &block_buf); in inode_scan_and_fix()
2527 retval = ext2fs_open_inode_scan(fs, 0, &scan); in inode_scan_and_fix()
2549 if (ext2fs_file_acl_block(fs, &inode) && in inode_scan_and_fix()
2551 ext2fs_file_acl_block(fs, &inode))) { in inode_scan_and_fix()
2552 blk = translate_block(ext2fs_file_acl_block(fs, in inode_scan_and_fix()
2557 ext2fs_file_acl_block_set(fs, &inode, blk); in inode_scan_and_fix()
2563 retval = ext2fs_write_inode(fs, ino, &inode); in inode_scan_and_fix()
2568 if (!ext2fs_inode_has_valid_blocks2(fs, &inode)) in inode_scan_and_fix()
2571 retval = ext2fs_block_iterate3(fs, ino, 0, block_buf, in inode_scan_and_fix()
2590 static int group_desc_scan_and_fix(ext2_filsys fs, ext2fs_block_bitmap bmap) in group_desc_scan_and_fix() argument
2595 for (i = 0; i < fs->group_desc_count; i++) { in group_desc_scan_and_fix()
2596 blk = ext2fs_block_bitmap_loc(fs, i); in group_desc_scan_and_fix()
2601 ext2fs_block_bitmap_loc_set(fs, i, new_blk); in group_desc_scan_and_fix()
2604 blk = ext2fs_inode_bitmap_loc(fs, i); in group_desc_scan_and_fix()
2609 ext2fs_inode_bitmap_loc_set(fs, i, new_blk); in group_desc_scan_and_fix()
2615 static int expand_inode_table(ext2_filsys fs, unsigned long new_ino_size) in expand_inode_table() argument
2627 old_itable_size = fs->inode_blocks_per_group * fs->blocksize; in expand_inode_table()
2628 old_ino_size = EXT2_INODE_SIZE(fs->super); in expand_inode_table()
2631 EXT2_INODES_PER_GROUP(fs->super) * in expand_inode_table()
2633 fs->blocksize); in expand_inode_table()
2635 new_itable_size = new_ino_blks_per_grp * fs->blocksize; in expand_inode_table()
2648 for (i = 0; i < fs->group_desc_count; i++) { in expand_inode_table()
2649 blk = ext2fs_inode_table_loc(fs, i); in expand_inode_table()
2650 retval = io_channel_read_blk64(fs->io, blk, in expand_inode_table()
2651 fs->inode_blocks_per_group, old_itable); in expand_inode_table()
2655 for (j = 0; j < EXT2_INODES_PER_GROUP(fs->super); j++) { in expand_inode_table()
2669 retval = io_channel_write_blk64(fs->io, blk, in expand_inode_table()
2676 fs->inode_blocks_per_group = new_ino_blks_per_grp; in expand_inode_table()
2677 ext2fs_free_inode_cache(fs->icache); in expand_inode_table()
2678 fs->icache = 0; in expand_inode_table()
2679 fs->super->s_inode_size = new_ino_size; in expand_inode_table()
2709 static int resize_inode(ext2_filsys fs, unsigned long new_size) in resize_inode() argument
2715 retval = ext2fs_read_inode_bitmap(fs); in resize_inode()
2720 retval = ext2fs_read_block_bitmap(fs); in resize_inode()
2729 EXT2_INODES_PER_GROUP(fs->super)* in resize_inode()
2731 fs->blocksize); in resize_inode()
2737 fs->super->s_state &= ~EXT2_VALID_FS; in resize_inode()
2739 retval = ext2fs_allocate_block_bitmap(fs, _("blocks to be moved"), in resize_inode()
2746 retval = get_move_bitmaps(fs, new_ino_blks_per_grp, bmap); in resize_inode()
2751 retval = move_block(fs, bmap); in resize_inode()
2757 retval = inode_scan_and_fix(fs, bmap); in resize_inode()
2761 retval = group_desc_scan_and_fix(fs, bmap); in resize_inode()
2765 retval = expand_inode_table(fs, new_size); in resize_inode()
2769 ext2fs_calculate_summary_stats(fs, 1 /* super only */); in resize_inode()
2771 fs->super->s_state |= EXT2_VALID_FS; in resize_inode()
2773 ext2fs_mark_super_dirty(fs); in resize_inode()
2774 ext2fs_mark_bb_dirty(fs); in resize_inode()
2943 ext2_filsys fs; in main() local
2990 0, 0, io_ptr, &fs); in main()
2997 dump_mmp_msg(fs->mmp_buf, in main()
3002 dump_mmp_msg(fs->mmp_buf, NULL); in main()
3013 ext2fs_free(fs); in main()
3016 if (ext2fs_has_feature_journal_dev(fs->super)) { in main()
3018 ext2fs_free(fs); in main()
3021 fs->default_bitmap_type = EXT2FS_BMAP64_RBTREE; in main()
3029 if (new_inode_size == EXT2_INODE_SIZE(fs->super)) { in main()
3035 if (new_inode_size < EXT2_INODE_SIZE(fs->super)) { in main()
3041 if (new_inode_size > fs->blocksize) { in main()
3043 new_inode_size, fs->blocksize); in main()
3047 rc = check_fsck_needed(fs, in main()
3067 ext2fs_close_free(&fs); in main()
3072 sb = fs->super; in main()
3073 fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY; in main()
3105 ext2fs_has_feature_journal_needs_recovery(fs->super)) { in main()
3107 retval = ext2fs_run_ext3_journal(&fs); in main()
3112 if (!fs) in main()
3117 sb = fs->super; in main()
3122 fs->flags |= EXT2_FLAG_SUPER_ONLY; in main()
3129 ext2fs_mark_super_dirty(fs); in main()
3135 ext2fs_mark_super_dirty(fs); in main()
3140 ext2fs_mark_super_dirty(fs); in main()
3145 ext2fs_mark_super_dirty(fs); in main()
3157 ext2fs_mark_super_dirty(fs); in main()
3164 ext2fs_mark_super_dirty(fs); in main()
3178 ext2fs_mark_super_dirty(fs); in main()
3196 ext2fs_mark_super_dirty(fs); in main()
3209 ext2fs_mark_super_dirty(fs); in main()
3215 ext2fs_mark_super_dirty(fs); in main()
3225 ext2fs_mark_super_dirty(fs); in main()
3231 ext2fs_mark_super_dirty(fs); in main()
3234 rc = update_mntopts(fs, mntopts_cmd); in main()
3239 rc = update_feature_set(fs, features_cmd); in main()
3244 rc = parse_extended_opts(fs, extended_cmd); in main()
3256 rc = ext2fs_mmp_clear(fs); in main()
3260 rc = add_journal(fs); in main()
3272 rc = handle_quota_options(fs); in main()
3283 if (ext2fs_has_feature_stable_inodes(fs->super)) { in main()
3290 if (!ext2fs_has_feature_csum_seed(fs->super) && in main()
3291 (ext2fs_has_feature_metadata_csum(fs->super) || in main()
3292 ext2fs_has_feature_ea_inode(fs->super))) { in main()
3293 rc = check_fsck_needed(fs, in main()
3301 if (ext2fs_has_group_desc_csum(fs)) { in main()
3303 * Changing the UUID on a metadata_csum FS requires in main()
3305 * mounted fs. Don't allow that unless we're saving in main()
3309 !ext2fs_has_feature_csum_seed(fs->super) && in main()
3310 ext2fs_has_feature_metadata_csum(fs->super)) { in main()
3328 for (i = 0; i < fs->group_desc_count; i++) in main()
3329 if (!ext2fs_group_desc_csum_verify(fs, i)) in main()
3331 if (i >= fs->group_desc_count) in main()
3349 ext2fs_init_csum_seed(fs); in main()
3351 for (i = 0; i < fs->group_desc_count; i++) in main()
3352 ext2fs_group_desc_csum_set(fs, i); in main()
3353 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in main()
3357 if (!(rc = get_journal_sb(fs, buf))) { in main()
3365 if ((rc = io_channel_write_blk64(fs->io, in main()
3366 ext2fs_journal_sb_start(fs->blocksize), in main()
3378 ext2fs_mark_super_dirty(fs); in main()
3389 if (ext2fs_has_feature_flex_bg(fs->super)) { in main()
3402 fs->flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS; in main()
3403 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in main()
3404 retval = resize_inode(fs, new_inode_size); in main()
3406 fs->flags &= ~EXT2_FLAG_IGNORE_CSUM_ERRORS; in main()
3419 retval = rewrite_metadata_checksums(fs, rewrite_checksums); in main()
3431 ext2fs_mark_super_dirty(fs); in main()
3436 ext2fs_mark_super_dirty(fs); in main()
3440 strncpy((char *)(fs->super->s_mount_opts), ext_mount_opts, in main()
3441 sizeof(fs->super->s_mount_opts)); in main()
3442 fs->super->s_mount_opts[sizeof(fs->super->s_mount_opts)-1] = 0; in main()
3443 ext2fs_mark_super_dirty(fs); in main()
3454 ext2fs_mmp_stop(fs); in main()
3461 convert_64bit(fs, feature_64bit); in main()
3463 retval = ext2fs_close_free(&fs); in main()