Lines Matching full:fs

35 blk64_t ext2fs_descriptor_block_loc2(ext2_filsys fs, blk64_t group_block,  in ext2fs_descriptor_block_loc2()  argument
43 * On a bigalloc FS with 1K blocks, block 0 is reserved for non-ext4 in ext2fs_descriptor_block_loc2()
46 if (i == 0 && fs->blocksize == 1024 && EXT2FS_CLUSTER_RATIO(fs) > 1) in ext2fs_descriptor_block_loc2()
49 if (!ext2fs_has_feature_meta_bg(fs->super) || in ext2fs_descriptor_block_loc2()
50 (i < fs->super->s_first_meta_bg)) in ext2fs_descriptor_block_loc2()
53 bg = EXT2_DESC_PER_BLOCK(fs->super) * i; in ext2fs_descriptor_block_loc2()
54 if (ext2fs_bg_has_super(fs, bg)) in ext2fs_descriptor_block_loc2()
56 ret_blk = ext2fs_group_first_block2(fs, bg); in ext2fs_descriptor_block_loc2()
65 if (group_block != fs->super->s_first_data_block && in ext2fs_descriptor_block_loc2()
66 ((ret_blk + has_super + fs->super->s_blocks_per_group) < in ext2fs_descriptor_block_loc2()
67 ext2fs_blocks_count(fs->super))) { in ext2fs_descriptor_block_loc2()
68 ret_blk += fs->super->s_blocks_per_group; in ext2fs_descriptor_block_loc2()
75 if (ext2fs_bg_has_super(fs, bg + 1)) in ext2fs_descriptor_block_loc2()
83 blk_t ext2fs_descriptor_block_loc(ext2_filsys fs, blk_t group_block, dgrp_t i) in ext2fs_descriptor_block_loc() argument
85 return ext2fs_descriptor_block_loc2(fs, group_block, i); in ext2fs_descriptor_block_loc()
121 ext2_filsys fs; in ext2fs_open2() local
141 retval = ext2fs_get_mem(sizeof(struct struct_ext2_filsys), &fs); in ext2fs_open2()
145 memset(fs, 0, sizeof(struct struct_ext2_filsys)); in ext2fs_open2()
146 fs->magic = EXT2_ET_MAGIC_EXT2FS_FILSYS; in ext2fs_open2()
147 fs->flags = flags; in ext2fs_open2()
149 fs->flags |= EXT2_FLAG_MASTER_SB_ONLY; in ext2fs_open2()
150 fs->umask = 022; in ext2fs_open2()
154 fs->now = strtoul(time_env, NULL, 0); in ext2fs_open2()
156 retval = ext2fs_get_mem(strlen(name)+1, &fs->device_name); in ext2fs_open2()
159 strcpy(fs->device_name, name); in ext2fs_open2()
160 cp = strchr(fs->device_name, '?'); in ext2fs_open2()
175 retval = manager->open(fs->device_name, io_flags, &fs->io); in ext2fs_open2()
179 (retval = io_channel_set_options(fs->io, io_options))) in ext2fs_open2()
181 fs->image_io = fs->io; in ext2fs_open2()
182 fs->io->app_data = fs; in ext2fs_open2()
183 retval = io_channel_alloc_buf(fs->io, -SUPERBLOCK_SIZE, &fs->super); in ext2fs_open2()
188 &fs->image_header); in ext2fs_open2()
191 retval = io_channel_read_blk(fs->io, 0, in ext2fs_open2()
193 fs->image_header); in ext2fs_open2()
196 if (ext2fs_le32_to_cpu(fs->image_header->magic_number) != EXT2_ET_MAGIC_E2IMAGE) in ext2fs_open2()
199 block_size = ext2fs_le32_to_cpu(fs->image_header->fs_blocksize); in ext2fs_open2()
216 io_channel_set_blksize(fs->io, block_size); in ext2fs_open2()
218 fs->orig_super = 0; in ext2fs_open2()
220 io_channel_set_blksize(fs->io, SUPERBLOCK_OFFSET); in ext2fs_open2()
223 retval = ext2fs_get_mem(SUPERBLOCK_SIZE, &fs->orig_super); in ext2fs_open2()
228 retval = io_channel_read_blk(fs->io, superblock, -SUPERBLOCK_SIZE, in ext2fs_open2()
229 fs->super); in ext2fs_open2()
232 if (fs->orig_super) in ext2fs_open2()
233 memcpy(fs->orig_super, fs->super, SUPERBLOCK_SIZE); in ext2fs_open2()
235 if (!(fs->flags & EXT2_FLAG_IGNORE_CSUM_ERRORS)) { in ext2fs_open2()
237 if (!ext2fs_verify_csum_type(fs, fs->super)) in ext2fs_open2()
239 if (!ext2fs_superblock_csum_verify(fs, fs->super)) { in ext2fs_open2()
247 fs->flags |= EXT2_FLAG_SWAP_BYTES; in ext2fs_open2()
248 ext2fs_swap_super(fs->super); in ext2fs_open2()
250 if (fs->flags & EXT2_FLAG_SWAP_BYTES) { in ext2fs_open2()
256 if (fs->super->s_magic != EXT2_SUPER_MAGIC) in ext2fs_open2()
261 if (fs->super->s_rev_level > EXT2_LIB_CURRENT_REV) { in ext2fs_open2()
270 features = fs->super->s_feature_incompat; in ext2fs_open2()
280 features = fs->super->s_feature_ro_compat; in ext2fs_open2()
292 ext2fs_has_feature_journal_dev(fs->super)) { in ext2fs_open2()
298 if ((fs->super->s_log_block_size > in ext2fs_open2()
300 (fs->super->s_log_cluster_size > in ext2fs_open2()
302 (fs->super->s_log_block_size > fs->super->s_log_cluster_size) || in ext2fs_open2()
303 (fs->super->s_log_groups_per_flex > 31)) { in ext2fs_open2()
312 if (ext2fs_has_feature_bigalloc(fs->super) && in ext2fs_open2()
318 if (!ext2fs_has_feature_bigalloc(fs->super) && in ext2fs_open2()
319 (fs->super->s_log_block_size != fs->super->s_log_cluster_size)) { in ext2fs_open2()
323 fs->fragsize = fs->blocksize = EXT2_BLOCK_SIZE(fs->super); in ext2fs_open2()
324 inode_size = EXT2_INODE_SIZE(fs->super); in ext2fs_open2()
326 (inode_size > fs->blocksize) || in ext2fs_open2()
334 ext2fs_has_feature_64bit(fs->super)) { in ext2fs_open2()
335 unsigned desc_size = fs->super->s_desc_size; in ext2fs_open2()
345 fs->cluster_ratio_bits = fs->super->s_log_cluster_size - in ext2fs_open2()
346 fs->super->s_log_block_size; in ext2fs_open2()
347 if (EXT2_BLOCKS_PER_GROUP(fs->super) != in ext2fs_open2()
348 EXT2_CLUSTERS_PER_GROUP(fs->super) << fs->cluster_ratio_bits) { in ext2fs_open2()
352 fs->inode_blocks_per_group = ((EXT2_INODES_PER_GROUP(fs->super) * in ext2fs_open2()
353 EXT2_INODE_SIZE(fs->super) + in ext2fs_open2()
354 EXT2_BLOCK_SIZE(fs->super) - 1) / in ext2fs_open2()
355 EXT2_BLOCK_SIZE(fs->super)); in ext2fs_open2()
357 if (block_size != fs->blocksize) { in ext2fs_open2()
365 io_channel_set_blksize(fs->io, fs->blocksize); in ext2fs_open2()
371 if (ext2fs_has_feature_journal_dev(fs->super)) { in ext2fs_open2()
372 fs->group_desc_count = 0; in ext2fs_open2()
373 *ret_fs = fs; in ext2fs_open2()
377 if (EXT2_INODES_PER_GROUP(fs->super) == 0) { in ext2fs_open2()
381 /* Precompute the FS UUID to seed other checksums */ in ext2fs_open2()
382 ext2fs_init_csum_seed(fs); in ext2fs_open2()
387 blocks_per_group = EXT2_BLOCKS_PER_GROUP(fs->super); in ext2fs_open2()
389 blocks_per_group > EXT2_MAX_BLOCKS_PER_GROUP(fs->super) || in ext2fs_open2()
390 fs->inode_blocks_per_group > EXT2_MAX_INODES_PER_GROUP(fs->super) || in ext2fs_open2()
391 EXT2_DESC_PER_BLOCK(fs->super) == 0 || in ext2fs_open2()
392 fs->super->s_first_data_block >= ext2fs_blocks_count(fs->super)) { in ext2fs_open2()
396 groups_cnt = ext2fs_div64_ceil(ext2fs_blocks_count(fs->super) - in ext2fs_open2()
397 fs->super->s_first_data_block, in ext2fs_open2()
403 fs->group_desc_count = groups_cnt; in ext2fs_open2()
405 (__u64)fs->group_desc_count * EXT2_INODES_PER_GROUP(fs->super) != in ext2fs_open2()
406 fs->super->s_inodes_count) { in ext2fs_open2()
410 fs->desc_blocks = ext2fs_div_ceil(fs->group_desc_count, in ext2fs_open2()
411 EXT2_DESC_PER_BLOCK(fs->super)); in ext2fs_open2()
412 if (ext2fs_has_feature_meta_bg(fs->super) && in ext2fs_open2()
413 (fs->super->s_first_meta_bg > fs->desc_blocks) && in ext2fs_open2()
420 retval = ext2fs_get_array(fs->desc_blocks, fs->blocksize, in ext2fs_open2()
421 &fs->group_desc); in ext2fs_open2()
425 group_block = fs->super->s_first_data_block; in ext2fs_open2()
427 * On a FS with a 1K blocksize, block 0 is reserved for bootloaders in ext2fs_open2()
437 if (group_block == 0 && fs->blocksize == 1024) in ext2fs_open2()
439 dest = (char *) fs->group_desc; in ext2fs_open2()
441 groups_per_block = EXT2_DESC_PER_BLOCK(fs->super); in ext2fs_open2()
443 if (ext2fs_has_feature_meta_bg(fs->super) && in ext2fs_open2()
445 first_meta_bg = fs->super->s_first_meta_bg; in ext2fs_open2()
446 if (first_meta_bg > fs->desc_blocks) in ext2fs_open2()
447 first_meta_bg = fs->desc_blocks; in ext2fs_open2()
449 first_meta_bg = fs->desc_blocks; in ext2fs_open2()
451 retval = io_channel_read_blk(fs->io, group_block + in ext2fs_open2()
459 gdp = ext2fs_group_desc(fs, fs->group_desc, j); in ext2fs_open2()
461 ext2fs_swap_group_desc2(fs, gdp); in ext2fs_open2()
464 dest += fs->blocksize*first_meta_bg; in ext2fs_open2()
467 for (i = first_meta_bg ; i < fs->desc_blocks; i++) { in ext2fs_open2()
468 blk = ext2fs_descriptor_block_loc2(fs, group_block, i); in ext2fs_open2()
469 io_channel_cache_readahead(fs->io, blk, 1); in ext2fs_open2()
472 for (i=first_meta_bg ; i < fs->desc_blocks; i++) { in ext2fs_open2()
473 blk = ext2fs_descriptor_block_loc2(fs, group_block, i); in ext2fs_open2()
474 retval = io_channel_read_blk64(fs->io, blk, 1, dest); in ext2fs_open2()
479 gdp = ext2fs_group_desc(fs, fs->group_desc, in ext2fs_open2()
482 ext2fs_swap_group_desc2(fs, gdp); in ext2fs_open2()
485 dest += fs->blocksize; in ext2fs_open2()
488 fs->stride = fs->super->s_raid_stride; in ext2fs_open2()
494 if (superblock > 1 && ext2fs_has_group_desc_csum(fs)) { in ext2fs_open2()
497 for (group = 0; group < fs->group_desc_count; group++) { in ext2fs_open2()
498 ext2fs_bg_flags_clear(fs, group, EXT2_BG_BLOCK_UNINIT); in ext2fs_open2()
499 ext2fs_bg_flags_clear(fs, group, EXT2_BG_INODE_UNINIT); in ext2fs_open2()
500 ext2fs_bg_itable_unused_set(fs, group, 0); in ext2fs_open2()
503 ext2fs_group_desc_csum_set(fs, group); in ext2fs_open2()
505 if (fs->flags & EXT2_FLAG_RW) in ext2fs_open2()
506 ext2fs_mark_super_dirty(fs); in ext2fs_open2()
509 if (ext2fs_has_feature_mmp(fs->super) && in ext2fs_open2()
512 retval = ext2fs_mmp_start(fs); in ext2fs_open2()
514 fs->flags |= EXT2_FLAG_SKIP_MMP; /* just do cleanup */ in ext2fs_open2()
515 ext2fs_mmp_stop(fs); in ext2fs_open2()
520 if (fs->flags & EXT2_FLAG_SHARE_DUP) { in ext2fs_open2()
521 fs->block_sha_map = ext2fs_hashmap_create(ext2fs_djb2_hash, in ext2fs_open2()
523 if (!fs->block_sha_map) { in ext2fs_open2()
527 ext2fs_set_feature_shared_blocks(fs->super); in ext2fs_open2()
530 if (ext2fs_has_feature_casefold(fs->super)) in ext2fs_open2()
531 fs->encoding = ext2fs_load_nls_table(fs->super->s_encoding); in ext2fs_open2()
533 fs->flags &= ~EXT2_FLAG_NOFREE_ON_ERROR; in ext2fs_open2()
534 *ret_fs = fs; in ext2fs_open2()
539 ext2fs_free(fs); in ext2fs_open2()
540 fs = NULL; in ext2fs_open2()
542 *ret_fs = fs; in ext2fs_open2()
551 errcode_t ext2fs_get_data_io(ext2_filsys fs, io_channel *old_io) in ext2fs_get_data_io() argument
553 if ((fs->flags & EXT2_FLAG_IMAGE_FILE) == 0) in ext2fs_get_data_io()
556 *old_io = (fs->image_io == fs->io) ? 0 : fs->io; in ext2fs_get_data_io()
561 errcode_t ext2fs_set_data_io(ext2_filsys fs, io_channel new_io) in ext2fs_set_data_io() argument
563 if ((fs->flags & EXT2_FLAG_IMAGE_FILE) == 0) in ext2fs_set_data_io()
565 fs->io = new_io ? new_io : fs->image_io; in ext2fs_set_data_io()
569 errcode_t ext2fs_rewrite_to_io(ext2_filsys fs, io_channel new_io) in ext2fs_rewrite_to_io() argument
573 if ((fs->flags & EXT2_FLAG_IMAGE_FILE) == 0) in ext2fs_rewrite_to_io()
575 err = io_channel_set_blksize(new_io, fs->blocksize); in ext2fs_rewrite_to_io()
578 if ((new_io == fs->image_io) || (new_io == fs->io)) in ext2fs_rewrite_to_io()
580 if ((fs->image_io != fs->io) && in ext2fs_rewrite_to_io()
581 fs->image_io) in ext2fs_rewrite_to_io()
582 io_channel_close(fs->image_io); in ext2fs_rewrite_to_io()
583 if (fs->io) in ext2fs_rewrite_to_io()
584 io_channel_close(fs->io); in ext2fs_rewrite_to_io()
585 fs->io = fs->image_io = new_io; in ext2fs_rewrite_to_io()
586 fs->flags |= EXT2_FLAG_DIRTY | EXT2_FLAG_RW | in ext2fs_rewrite_to_io()
588 fs->flags &= ~EXT2_FLAG_IMAGE_FILE; in ext2fs_rewrite_to_io()