• Home
  • Raw
  • Download

Lines Matching refs:fs

35 blk64_t ext2fs_descriptor_block_loc2(ext2_filsys fs, blk64_t group_block,  in ext2fs_descriptor_block_loc2()  argument
42 if (!(fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) || in ext2fs_descriptor_block_loc2()
43 (i < fs->super->s_first_meta_bg)) in ext2fs_descriptor_block_loc2()
46 bg = EXT2_DESC_PER_BLOCK(fs->super) * i; in ext2fs_descriptor_block_loc2()
47 if (ext2fs_bg_has_super(fs, bg)) in ext2fs_descriptor_block_loc2()
49 ret_blk = ext2fs_group_first_block2(fs, bg) + has_super; in ext2fs_descriptor_block_loc2()
58 if (group_block != fs->super->s_first_data_block && in ext2fs_descriptor_block_loc2()
59 ((ret_blk + fs->super->s_blocks_per_group) < in ext2fs_descriptor_block_loc2()
60 ext2fs_blocks_count(fs->super))) in ext2fs_descriptor_block_loc2()
61 ret_blk += fs->super->s_blocks_per_group; in ext2fs_descriptor_block_loc2()
65 blk_t ext2fs_descriptor_block_loc(ext2_filsys fs, blk_t group_block, dgrp_t i) in ext2fs_descriptor_block_loc() argument
67 return ext2fs_descriptor_block_loc2(fs, group_block, i); in ext2fs_descriptor_block_loc()
97 ext2_filsys fs; in ext2fs_open2() local
112 retval = ext2fs_get_mem(sizeof(struct struct_ext2_filsys), &fs); in ext2fs_open2()
116 memset(fs, 0, sizeof(struct struct_ext2_filsys)); in ext2fs_open2()
117 fs->magic = EXT2_ET_MAGIC_EXT2FS_FILSYS; in ext2fs_open2()
118 fs->flags = flags; in ext2fs_open2()
120 fs->flags |= EXT2_FLAG_MASTER_SB_ONLY; in ext2fs_open2()
121 fs->umask = 022; in ext2fs_open2()
122 retval = ext2fs_get_mem(strlen(name)+1, &fs->device_name); in ext2fs_open2()
125 strcpy(fs->device_name, name); in ext2fs_open2()
126 cp = strchr(fs->device_name, '?'); in ext2fs_open2()
139 retval = manager->open(fs->device_name, io_flags, &fs->io); in ext2fs_open2()
143 (retval = io_channel_set_options(fs->io, io_options))) in ext2fs_open2()
145 fs->image_io = fs->io; in ext2fs_open2()
146 fs->io->app_data = fs; in ext2fs_open2()
147 retval = io_channel_alloc_buf(fs->io, -SUPERBLOCK_SIZE, &fs->super); in ext2fs_open2()
152 &fs->image_header); in ext2fs_open2()
155 retval = io_channel_read_blk(fs->io, 0, in ext2fs_open2()
157 fs->image_header); in ext2fs_open2()
160 if (fs->image_header->magic_number != EXT2_ET_MAGIC_E2IMAGE) in ext2fs_open2()
163 block_size = fs->image_header->fs_blocksize; in ext2fs_open2()
180 io_channel_set_blksize(fs->io, block_size); in ext2fs_open2()
182 fs->orig_super = 0; in ext2fs_open2()
184 io_channel_set_blksize(fs->io, SUPERBLOCK_OFFSET); in ext2fs_open2()
187 retval = ext2fs_get_mem(SUPERBLOCK_SIZE, &fs->orig_super); in ext2fs_open2()
191 retval = io_channel_read_blk(fs->io, superblock, -SUPERBLOCK_SIZE, in ext2fs_open2()
192 fs->super); in ext2fs_open2()
195 if (fs->orig_super) in ext2fs_open2()
196 memcpy(fs->orig_super, fs->super, SUPERBLOCK_SIZE); in ext2fs_open2()
199 fs->flags |= EXT2_FLAG_SWAP_BYTES; in ext2fs_open2()
200 ext2fs_swap_super(fs->super); in ext2fs_open2()
202 if (fs->flags & EXT2_FLAG_SWAP_BYTES) { in ext2fs_open2()
208 if (fs->super->s_magic != EXT2_SUPER_MAGIC) { in ext2fs_open2()
212 if (fs->super->s_rev_level > EXT2_LIB_CURRENT_REV) { in ext2fs_open2()
221 features = fs->super->s_feature_incompat; in ext2fs_open2()
231 features = fs->super->s_feature_ro_compat; in ext2fs_open2()
243 (fs->super->s_feature_incompat & in ext2fs_open2()
250 if ((fs->super->s_log_block_size + EXT2_MIN_BLOCK_LOG_SIZE) > in ext2fs_open2()
260 if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super, in ext2fs_open2()
267 if (!EXT2_HAS_RO_COMPAT_FEATURE(fs->super, in ext2fs_open2()
269 (fs->super->s_log_block_size != fs->super->s_log_cluster_size)) { in ext2fs_open2()
273 fs->fragsize = fs->blocksize = EXT2_BLOCK_SIZE(fs->super); in ext2fs_open2()
274 if (EXT2_INODE_SIZE(fs->super) < EXT2_GOOD_OLD_INODE_SIZE) { in ext2fs_open2()
278 fs->cluster_ratio_bits = fs->super->s_log_cluster_size - in ext2fs_open2()
279 fs->super->s_log_block_size; in ext2fs_open2()
280 if (EXT2_BLOCKS_PER_GROUP(fs->super) != in ext2fs_open2()
281 EXT2_CLUSTERS_PER_GROUP(fs->super) << fs->cluster_ratio_bits) { in ext2fs_open2()
285 fs->inode_blocks_per_group = ((EXT2_INODES_PER_GROUP(fs->super) * in ext2fs_open2()
286 EXT2_INODE_SIZE(fs->super) + in ext2fs_open2()
287 EXT2_BLOCK_SIZE(fs->super) - 1) / in ext2fs_open2()
288 EXT2_BLOCK_SIZE(fs->super)); in ext2fs_open2()
290 if (block_size != fs->blocksize) { in ext2fs_open2()
298 io_channel_set_blksize(fs->io, fs->blocksize); in ext2fs_open2()
304 if (fs->super->s_feature_incompat & in ext2fs_open2()
306 fs->group_desc_count = 0; in ext2fs_open2()
307 *ret_fs = fs; in ext2fs_open2()
311 if (EXT2_INODES_PER_GROUP(fs->super) == 0) { in ext2fs_open2()
319 blocks_per_group = EXT2_BLOCKS_PER_GROUP(fs->super); in ext2fs_open2()
321 blocks_per_group > EXT2_MAX_BLOCKS_PER_GROUP(fs->super) || in ext2fs_open2()
322 fs->inode_blocks_per_group > EXT2_MAX_INODES_PER_GROUP(fs->super) || in ext2fs_open2()
323 EXT2_DESC_PER_BLOCK(fs->super) == 0 || in ext2fs_open2()
324 fs->super->s_first_data_block >= ext2fs_blocks_count(fs->super)) { in ext2fs_open2()
328 fs->group_desc_count = ext2fs_div64_ceil(ext2fs_blocks_count(fs->super) - in ext2fs_open2()
329 fs->super->s_first_data_block, in ext2fs_open2()
331 if (fs->group_desc_count * EXT2_INODES_PER_GROUP(fs->super) != in ext2fs_open2()
332 fs->super->s_inodes_count) { in ext2fs_open2()
336 fs->desc_blocks = ext2fs_div_ceil(fs->group_desc_count, in ext2fs_open2()
337 EXT2_DESC_PER_BLOCK(fs->super)); in ext2fs_open2()
338 retval = ext2fs_get_array(fs->desc_blocks, fs->blocksize, in ext2fs_open2()
339 &fs->group_desc); in ext2fs_open2()
343 group_block = fs->super->s_first_data_block; in ext2fs_open2()
344 if (group_block == 0 && fs->blocksize == 1024) in ext2fs_open2()
346 dest = (char *) fs->group_desc; in ext2fs_open2()
348 groups_per_block = EXT2_DESC_PER_BLOCK(fs->super); in ext2fs_open2()
350 if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) in ext2fs_open2()
351 first_meta_bg = fs->super->s_first_meta_bg; in ext2fs_open2()
353 first_meta_bg = fs->desc_blocks; in ext2fs_open2()
355 retval = io_channel_read_blk(fs->io, group_block+1, in ext2fs_open2()
362 gdp = ext2fs_group_desc(fs, fs->group_desc, j); in ext2fs_open2()
363 ext2fs_swap_group_desc2(fs, gdp); in ext2fs_open2()
366 dest += fs->blocksize*first_meta_bg; in ext2fs_open2()
368 for (i=first_meta_bg ; i < fs->desc_blocks; i++) { in ext2fs_open2()
369 blk = ext2fs_descriptor_block_loc2(fs, group_block, i); in ext2fs_open2()
370 retval = io_channel_read_blk64(fs->io, blk, 1, dest); in ext2fs_open2()
375 gdp = ext2fs_group_desc(fs, fs->group_desc, in ext2fs_open2()
377 ext2fs_swap_group_desc2(fs, gdp); in ext2fs_open2()
380 dest += fs->blocksize; in ext2fs_open2()
383 fs->stride = fs->super->s_raid_stride; in ext2fs_open2()
389 if (superblock > 1 && EXT2_HAS_RO_COMPAT_FEATURE(fs->super, in ext2fs_open2()
393 for (group = 0; group < fs->group_desc_count; group++) { in ext2fs_open2()
394 ext2fs_bg_flags_clear(fs, group, EXT2_BG_BLOCK_UNINIT); in ext2fs_open2()
395 ext2fs_bg_flags_clear(fs, group, EXT2_BG_INODE_UNINIT); in ext2fs_open2()
396 ext2fs_bg_itable_unused_set(fs, group, 0); in ext2fs_open2()
399 ext2fs_group_desc_csum_set(fs, group); in ext2fs_open2()
401 if (fs->flags & EXT2_FLAG_RW) in ext2fs_open2()
402 ext2fs_mark_super_dirty(fs); in ext2fs_open2()
405 if ((fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_MMP) && in ext2fs_open2()
408 retval = ext2fs_mmp_start(fs); in ext2fs_open2()
410 fs->flags |= EXT2_FLAG_SKIP_MMP; /* just do cleanup */ in ext2fs_open2()
411 ext2fs_mmp_stop(fs); in ext2fs_open2()
416 fs->flags &= ~EXT2_FLAG_NOFREE_ON_ERROR; in ext2fs_open2()
417 *ret_fs = fs; in ext2fs_open2()
422 *ret_fs = fs; in ext2fs_open2()
424 ext2fs_free(fs); in ext2fs_open2()
433 errcode_t ext2fs_get_data_io(ext2_filsys fs, io_channel *old_io) in ext2fs_get_data_io() argument
435 if ((fs->flags & EXT2_FLAG_IMAGE_FILE) == 0) in ext2fs_get_data_io()
438 *old_io = (fs->image_io == fs->io) ? 0 : fs->io; in ext2fs_get_data_io()
443 errcode_t ext2fs_set_data_io(ext2_filsys fs, io_channel new_io) in ext2fs_set_data_io() argument
445 if ((fs->flags & EXT2_FLAG_IMAGE_FILE) == 0) in ext2fs_set_data_io()
447 fs->io = new_io ? new_io : fs->image_io; in ext2fs_set_data_io()
451 errcode_t ext2fs_rewrite_to_io(ext2_filsys fs, io_channel new_io) in ext2fs_rewrite_to_io() argument
455 if ((fs->flags & EXT2_FLAG_IMAGE_FILE) == 0) in ext2fs_rewrite_to_io()
457 err = io_channel_set_blksize(new_io, fs->blocksize); in ext2fs_rewrite_to_io()
460 if ((new_io == fs->image_io) || (new_io == fs->io)) in ext2fs_rewrite_to_io()
462 if ((fs->image_io != fs->io) && in ext2fs_rewrite_to_io()
463 fs->image_io) in ext2fs_rewrite_to_io()
464 io_channel_close(fs->image_io); in ext2fs_rewrite_to_io()
465 if (fs->io) in ext2fs_rewrite_to_io()
466 io_channel_close(fs->io); in ext2fs_rewrite_to_io()
467 fs->io = fs->image_io = new_io; in ext2fs_rewrite_to_io()
468 fs->flags |= EXT2_FLAG_DIRTY | EXT2_FLAG_RW | in ext2fs_rewrite_to_io()
470 fs->flags &= ~EXT2_FLAG_IMAGE_FILE; in ext2fs_rewrite_to_io()