Lines Matching refs:fs
179 static int remove_journal_device(ext2_filsys fs) in remove_journal_device() argument
193 uuid_unparse(fs->super->s_journal_uuid, buf); in remove_journal_device()
198 ext2fs_find_block_device(fs->super->s_journal_dev); in remove_journal_device()
212 fs->blocksize, io_ptr, &jfs); in remove_journal_device()
242 if (memcmp(fs->super->s_uuid, &jsb->s_users[i * 16], 16) == 0) in remove_journal_device()
272 fs->super->s_journal_dev = 0; in remove_journal_device()
273 uuid_clear(fs->super->s_journal_uuid); in remove_journal_device()
274 ext2fs_mark_super_dirty(fs); in remove_journal_device()
282 static int release_blocks_proc(ext2_filsys fs, blk64_t *blocknr, in release_blocks_proc() argument
292 ext2fs_unmark_block_bitmap2(fs->block_map, block); in release_blocks_proc()
293 group = ext2fs_group_of_blk2(fs, block); in release_blocks_proc()
294 ext2fs_bg_free_blocks_count_set(fs, group, ext2fs_bg_free_blocks_count(fs, group) + 1); in release_blocks_proc()
295 ext2fs_group_desc_csum_set(fs, group); in release_blocks_proc()
296 ext2fs_free_blocks_count_add(fs->super, EXT2FS_CLUSTER_RATIO(fs)); in release_blocks_proc()
303 static errcode_t remove_journal_inode(ext2_filsys fs) in remove_journal_inode() argument
307 ino_t ino = fs->super->s_journal_inum; in remove_journal_inode()
309 retval = ext2fs_read_inode(fs, ino, &inode); in remove_journal_inode()
316 retval = ext2fs_read_bitmaps(fs); in remove_journal_inode()
322 retval = ext2fs_block_iterate3(fs, ino, in remove_journal_inode()
331 ext2fs_mark_bb_dirty(fs); in remove_journal_inode()
332 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in remove_journal_inode()
335 retval = ext2fs_write_inode(fs, ino, &inode); in remove_journal_inode()
341 fs->super->s_journal_inum = 0; in remove_journal_inode()
342 ext2fs_mark_super_dirty(fs); in remove_journal_inode()
350 static int update_mntopts(ext2_filsys fs, char *mntopts) in update_mntopts() argument
352 struct ext2_super_block *sb = fs->super; in update_mntopts()
359 ext2fs_mark_super_dirty(fs); in update_mntopts()
364 static int check_fsck_needed(ext2_filsys fs) in check_fsck_needed() argument
366 if (fs->super->s_state & EXT2_VALID_FS) in check_fsck_needed()
374 static void request_fsck_afterwards(ext2_filsys fs) in request_fsck_afterwards() argument
380 fs->super->s_state &= ~EXT2_VALID_FS; in request_fsck_afterwards()
389 static int update_feature_set(ext2_filsys fs, char *features) in update_feature_set() argument
391 struct ext2_super_block *sb = fs->super; in update_feature_set()
446 if (remove_journal_inode(fs)) in update_feature_set()
450 if (remove_journal_device(fs)) in update_feature_set()
465 error = ext2fs_mmp_init(fs); in update_feature_set()
475 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in update_feature_set()
492 error = ext2fs_read_bitmaps(fs); in update_feature_set()
498 error = ext2fs_mmp_read(fs, sb->s_mmp_block, NULL); in update_feature_set()
500 struct mmp_struct *mmp_cmp = fs->mmp_cmp; in update_feature_set()
513 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in update_feature_set()
514 ext2fs_block_alloc_stats2(fs, sb->s_mmp_block, -1); in update_feature_set()
539 if (ext2fs_check_desc(fs)) { in update_feature_set()
561 for (i = 0; i < fs->group_desc_count; i++) { in update_feature_set()
562 gd = ext2fs_group_desc(fs, fs->group_desc, i); in update_feature_set()
565 ext2fs_group_desc_csum_set(fs, i); in update_feature_set()
567 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in update_feature_set()
572 for (i = 0; i < fs->group_desc_count; i++) { in update_feature_set()
573 gd = ext2fs_group_desc(fs, fs->group_desc, i); in update_feature_set()
579 request_fsck_afterwards(fs); in update_feature_set()
586 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in update_feature_set()
622 ext2fs_update_dynamic_rev(fs); in update_feature_set()
634 request_fsck_afterwards(fs); in update_feature_set()
639 ext2fs_mark_super_dirty(fs); in update_feature_set()
647 static int add_journal(ext2_filsys fs) in add_journal() argument
654 if (fs->super->s_feature_compat & in add_journal()
671 fs->blocksize, io_ptr, &jfs); in add_journal()
682 retval = ext2fs_add_journal_device(fs, jfs); in add_journal()
694 journal_blocks = figure_journal_size(journal_size, fs); in add_journal()
696 retval = ext2fs_add_journal_inode(fs, journal_blocks, in add_journal()
710 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in add_journal()
712 print_check_message(fs->super->s_max_mnt_count, in add_journal()
713 fs->super->s_checkinterval); in add_journal()
721 static void handle_quota_options(ext2_filsys fs) in handle_quota_options() argument
730 quota_init_context(&qctx, fs, -1); in handle_quota_options()
735 if (usrquota == QOPT_ENABLE && !fs->super->s_usr_quota_inum) { in handle_quota_options()
736 if ((qf_ino = quota_file_exists(fs, USRQUOTA, in handle_quota_options()
741 quota_remove_inode(fs, USRQUOTA); in handle_quota_options()
744 if (grpquota == QOPT_ENABLE && !fs->super->s_grp_quota_inum) { in handle_quota_options()
745 if ((qf_ino = quota_file_exists(fs, GRPQUOTA, in handle_quota_options()
750 quota_remove_inode(fs, GRPQUOTA); in handle_quota_options()
760 fs->super->s_feature_ro_compat |= EXT4_FEATURE_RO_COMPAT_QUOTA; in handle_quota_options()
761 ext2fs_mark_super_dirty(fs); in handle_quota_options()
762 } else if (!fs->super->s_usr_quota_inum && in handle_quota_options()
763 !fs->super->s_grp_quota_inum) { in handle_quota_options()
764 fs->super->s_feature_ro_compat &= ~EXT4_FEATURE_RO_COMPAT_QUOTA; in handle_quota_options()
765 ext2fs_mark_super_dirty(fs); in handle_quota_options()
1149 static int parse_extended_opts(ext2_filsys fs, const char *opts) in parse_extended_opts() argument
1206 fs->super->s_mmp_update_interval = intv; in parse_extended_opts()
1207 ext2fs_mark_super_dirty(fs); in parse_extended_opts()
1209 fs->super->s_flags |= EXT2_FLAGS_TEST_FILESYS; in parse_extended_opts()
1211 ext2fs_mark_super_dirty(fs); in parse_extended_opts()
1213 fs->super->s_flags &= ~EXT2_FLAGS_TEST_FILESYS; in parse_extended_opts()
1215 ext2fs_mark_super_dirty(fs); in parse_extended_opts()
1259 fs->super->s_def_hash_version = hash_alg; in parse_extended_opts()
1263 ext2fs_mark_super_dirty(fs); in parse_extended_opts()
1269 if (strlen(arg) >= sizeof(fs->super->s_mount_opts)) { in parse_extended_opts()
1303 static int get_move_bitmaps(ext2_filsys fs, int new_ino_blks_per_grp, in get_move_bitmaps() argument
1312 retval = ext2fs_read_bb_inode(fs, &bb_list); in get_move_bitmaps()
1316 for (i = 0; i < fs->group_desc_count; i++) { in get_move_bitmaps()
1317 start_blk = ext2fs_inode_table_loc(fs, i) + in get_move_bitmaps()
1318 fs->inode_blocks_per_group; in get_move_bitmaps()
1320 end_blk = ext2fs_inode_table_loc(fs, i) + in get_move_bitmaps()
1324 if (ext2fs_test_block_bitmap2(fs->block_map, j)) { in get_move_bitmaps()
1339 ext2fs_mark_block_bitmap2(fs->block_map, j); in get_move_bitmaps()
1346 if (needed_blocks > ext2fs_free_blocks_count(fs->super)) in get_move_bitmaps()
1352 static int ext2fs_is_meta_block(ext2_filsys fs, blk64_t blk) in ext2fs_is_meta_block() argument
1355 group = ext2fs_group_of_blk2(fs, blk); in ext2fs_is_meta_block()
1356 if (ext2fs_block_bitmap_loc(fs, group) == blk) in ext2fs_is_meta_block()
1358 if (ext2fs_inode_bitmap_loc(fs, group) == blk) in ext2fs_is_meta_block()
1363 static int ext2fs_is_block_in_group(ext2_filsys fs, dgrp_t group, blk64_t blk) in ext2fs_is_block_in_group() argument
1366 start_blk = fs->super->s_first_data_block + in ext2fs_is_block_in_group()
1367 EXT2_BLOCKS_PER_GROUP(fs->super) * group; in ext2fs_is_block_in_group()
1372 end_blk = start_blk + EXT2_BLOCKS_PER_GROUP(fs->super); in ext2fs_is_block_in_group()
1378 static int move_block(ext2_filsys fs, ext2fs_block_bitmap bmap) in move_block() argument
1388 retval = ext2fs_get_mem(fs->blocksize, &buf); in move_block()
1392 for (new_blk = blk = fs->super->s_first_data_block; in move_block()
1393 blk < ext2fs_blocks_count(fs->super); blk++) { in move_block()
1397 if (ext2fs_is_meta_block(fs, blk)) { in move_block()
1405 group = ext2fs_group_of_blk2(fs, blk); in move_block()
1406 goal = ext2fs_group_first_block2(fs, group); in move_block()
1412 retval = ext2fs_new_block2(fs, goal, NULL, &new_blk); in move_block()
1417 if (meta_data && !ext2fs_is_block_in_group(fs, group, new_blk)) { in move_block()
1423 ext2fs_mark_block_bitmap2(fs->block_map, new_blk); in move_block()
1435 retval = io_channel_read_blk64(fs->io, blk, 1, buf); in move_block()
1439 retval = io_channel_write_blk64(fs->io, new_blk, 1, buf); in move_block()
1463 static int process_block(ext2_filsys fs EXT2FS_ATTR((unused)), in process_block()
1488 static int inode_scan_and_fix(ext2_filsys fs, ext2fs_block_bitmap bmap) in inode_scan_and_fix() argument
1497 retval = ext2fs_get_mem(fs->blocksize * 3, &block_buf); in inode_scan_and_fix()
1501 retval = ext2fs_open_inode_scan(fs, 0, &scan); in inode_scan_and_fix()
1523 if (ext2fs_file_acl_block(fs, &inode) && in inode_scan_and_fix()
1525 ext2fs_file_acl_block(fs, &inode))) { in inode_scan_and_fix()
1526 blk = translate_block(ext2fs_file_acl_block(fs, in inode_scan_and_fix()
1531 ext2fs_file_acl_block_set(fs, &inode, blk); in inode_scan_and_fix()
1537 retval = ext2fs_write_inode(fs, ino, &inode); in inode_scan_and_fix()
1542 if (!ext2fs_inode_has_valid_blocks2(fs, &inode)) in inode_scan_and_fix()
1545 retval = ext2fs_block_iterate3(fs, ino, 0, block_buf, in inode_scan_and_fix()
1563 static int group_desc_scan_and_fix(ext2_filsys fs, ext2fs_block_bitmap bmap) in group_desc_scan_and_fix() argument
1568 for (i = 0; i < fs->group_desc_count; i++) { in group_desc_scan_and_fix()
1569 blk = ext2fs_block_bitmap_loc(fs, i); in group_desc_scan_and_fix()
1574 ext2fs_block_bitmap_loc_set(fs, i, new_blk); in group_desc_scan_and_fix()
1577 blk = ext2fs_inode_bitmap_loc(fs, i); in group_desc_scan_and_fix()
1582 ext2fs_inode_bitmap_loc_set(fs, i, new_blk); in group_desc_scan_and_fix()
1588 static int expand_inode_table(ext2_filsys fs, unsigned long new_ino_size) in expand_inode_table() argument
1600 old_itable_size = fs->inode_blocks_per_group * fs->blocksize; in expand_inode_table()
1601 old_ino_size = EXT2_INODE_SIZE(fs->super); in expand_inode_table()
1604 EXT2_INODES_PER_GROUP(fs->super) * in expand_inode_table()
1606 fs->blocksize); in expand_inode_table()
1608 new_itable_size = new_ino_blks_per_grp * fs->blocksize; in expand_inode_table()
1621 for (i = 0; i < fs->group_desc_count; i++) { in expand_inode_table()
1622 blk = ext2fs_inode_table_loc(fs, i); in expand_inode_table()
1623 retval = io_channel_read_blk64(fs->io, blk, in expand_inode_table()
1624 fs->inode_blocks_per_group, old_itable); in expand_inode_table()
1628 for (j = 0; j < EXT2_INODES_PER_GROUP(fs->super); j++) { in expand_inode_table()
1642 retval = io_channel_write_blk64(fs->io, blk, in expand_inode_table()
1649 fs->inode_blocks_per_group = new_ino_blks_per_grp; in expand_inode_table()
1650 fs->super->s_inode_size = new_ino_size; in expand_inode_table()
1662 static errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs) in ext2fs_calculate_summary_stats() argument
1674 for (blk = fs->super->s_first_data_block; in ext2fs_calculate_summary_stats()
1675 blk < ext2fs_blocks_count(fs->super); blk++) { in ext2fs_calculate_summary_stats()
1676 if (!ext2fs_fast_test_block_bitmap2(fs->block_map, blk)) { in ext2fs_calculate_summary_stats()
1681 if ((count == fs->super->s_blocks_per_group) || in ext2fs_calculate_summary_stats()
1682 (blk == ext2fs_blocks_count(fs->super)-1)) { in ext2fs_calculate_summary_stats()
1683 ext2fs_bg_free_blocks_count_set(fs, group++, in ext2fs_calculate_summary_stats()
1689 total_free = EXT2FS_C2B(fs, total_free); in ext2fs_calculate_summary_stats()
1690 ext2fs_free_blocks_count_set(fs->super, total_free); in ext2fs_calculate_summary_stats()
1701 for (ino = 1; ino <= fs->super->s_inodes_count && ino > 0; ino++) { in ext2fs_calculate_summary_stats()
1702 if (!ext2fs_fast_test_inode_bitmap2(fs->inode_map, ino)) { in ext2fs_calculate_summary_stats()
1707 if ((count == fs->super->s_inodes_per_group) || in ext2fs_calculate_summary_stats()
1708 (ino == fs->super->s_inodes_count)) { in ext2fs_calculate_summary_stats()
1709 ext2fs_bg_free_inodes_count_set(fs, group++, in ext2fs_calculate_summary_stats()
1715 fs->super->s_free_inodes_count = total_free; in ext2fs_calculate_summary_stats()
1716 ext2fs_mark_super_dirty(fs); in ext2fs_calculate_summary_stats()
1737 static int resize_inode(ext2_filsys fs, unsigned long new_size) in resize_inode() argument
1743 retval = ext2fs_read_inode_bitmap(fs); in resize_inode()
1748 retval = ext2fs_read_block_bitmap(fs); in resize_inode()
1757 EXT2_INODES_PER_GROUP(fs->super)* in resize_inode()
1759 fs->blocksize); in resize_inode()
1765 fs->super->s_state &= ~EXT2_VALID_FS; in resize_inode()
1767 retval = ext2fs_allocate_block_bitmap(fs, _("blocks to be moved"), in resize_inode()
1774 retval = get_move_bitmaps(fs, new_ino_blks_per_grp, bmap); in resize_inode()
1779 retval = move_block(fs, bmap); in resize_inode()
1785 retval = inode_scan_and_fix(fs, bmap); in resize_inode()
1789 retval = group_desc_scan_and_fix(fs, bmap); in resize_inode()
1793 retval = expand_inode_table(fs, new_size); in resize_inode()
1797 ext2fs_calculate_summary_stats(fs); in resize_inode()
1799 fs->super->s_state |= EXT2_VALID_FS; in resize_inode()
1801 ext2fs_mark_super_dirty(fs); in resize_inode()
1802 ext2fs_mark_bb_dirty(fs); in resize_inode()
1887 ext2_filsys fs; in main() local
1930 0, 0, io_ptr, &fs); in main()
1937 dump_mmp_msg(fs->mmp_buf, in main()
1942 dump_mmp_msg(fs->mmp_buf, NULL); in main()
1951 ext2fs_free(fs); in main()
1954 fs->default_bitmap_type = EXT2FS_BMAP64_RBTREE; in main()
1962 if (new_inode_size == EXT2_INODE_SIZE(fs->super)) { in main()
1968 if (new_inode_size < EXT2_INODE_SIZE(fs->super)) { in main()
1974 if (new_inode_size > fs->blocksize) { in main()
1976 new_inode_size, fs->blocksize); in main()
1992 ext2fs_close(fs); in main()
1997 sb = fs->super; in main()
1998 fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY; in main()
2017 fs->flags |= EXT2_FLAG_SUPER_ONLY; in main()
2021 ext2fs_mark_super_dirty(fs); in main()
2027 ext2fs_mark_super_dirty(fs); in main()
2032 ext2fs_mark_super_dirty(fs); in main()
2037 ext2fs_mark_super_dirty(fs); in main()
2049 ext2fs_mark_super_dirty(fs); in main()
2056 ext2fs_mark_super_dirty(fs); in main()
2069 ext2fs_mark_super_dirty(fs); in main()
2082 ext2fs_mark_super_dirty(fs); in main()
2095 ext2fs_mark_super_dirty(fs); in main()
2101 ext2fs_mark_super_dirty(fs); in main()
2111 ext2fs_mark_super_dirty(fs); in main()
2117 ext2fs_mark_super_dirty(fs); in main()
2120 rc = update_mntopts(fs, mntopts_cmd); in main()
2125 rc = update_feature_set(fs, features_cmd); in main()
2130 rc = parse_extended_opts(fs, extended_cmd); in main()
2141 rc = ext2fs_mmp_clear(fs); in main()
2145 rc = add_journal(fs); in main()
2157 handle_quota_options(fs); in main()
2176 if (check_fsck_needed(fs)) in main()
2184 for (i = 0; i < fs->group_desc_count; i++) in main()
2185 if (!ext2fs_group_desc_csum_verify(fs, i)) in main()
2187 if (i >= fs->group_desc_count) in main()
2204 for (i = 0; i < fs->group_desc_count; i++) in main()
2205 ext2fs_group_desc_csum_set(fs, i); in main()
2206 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in main()
2208 ext2fs_mark_super_dirty(fs); in main()
2218 if (fs->super->s_feature_incompat & in main()
2231 fs->flags &= ~EXT2_FLAG_SUPER_ONLY; in main()
2232 if (resize_inode(fs, new_inode_size) == 0) { in main()
2246 ext2fs_mark_super_dirty(fs); in main()
2251 ext2fs_mark_super_dirty(fs); in main()
2255 strncpy((char *)(fs->super->s_mount_opts), ext_mount_opts, in main()
2256 sizeof(fs->super->s_mount_opts)); in main()
2257 fs->super->s_mount_opts[sizeof(fs->super->s_mount_opts)-1] = 0; in main()
2258 ext2fs_mark_super_dirty(fs); in main()
2268 ext2fs_mmp_stop(fs); in main()
2273 return (ext2fs_close(fs) ? 1 : 0); in main()