Home | History | Annotate | Download | only in ext2fs

Lines Matching refs:fs

35 int ext2fs_bg_has_super(ext2_filsys fs, int group_block)
37 if (!(fs->super->s_feature_ro_compat &
61 int ext2fs_super_and_bgd_loc(ext2_filsys fs,
73 group_block = ext2fs_group_first_block(fs, group);
75 if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
76 old_desc_blocks = fs->super->s_first_meta_bg;
79 fs->desc_blocks + fs->super->s_reserved_gdt_blocks;
81 if (group == fs->group_desc_count-1) {
82 numblocks = (fs->super->s_blocks_count -
83 fs->super->s_first_data_block) %
84 fs->super->s_blocks_per_group;
86 numblocks = fs->super->s_blocks_per_group;
88 numblocks = fs->super->s_blocks_per_group;
90 has_super = ext2fs_bg_has_super(fs, group);
96 meta_bg_size = EXT2_DESC_PER_BLOCK(fs->super);
99 if (!(fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) ||
100 (meta_bg < fs->super->s_first_meta_bg)) {
116 numblocks -= 2 + fs->inode_blocks_per_group;
140 static errcode_t write_primary_superblock(ext2_filsys fs,
147 if (!fs->io->manager->write_byte || !fs->orig_super) {
148 io_channel_set_blksize(fs->io, SUPERBLOCK_OFFSET);
149 retval = io_channel_write_blk(fs->io, 1, -SUPERBLOCK_SIZE,
151 io_channel_set_blksize(fs->io, fs->blocksize);
155 old_super = (__u16 *) fs->orig_super;
170 retval = io_channel_write_byte(fs->io,
176 memcpy(fs->orig_super, super, SUPERBLOCK_SIZE);
184 void ext2fs_update_dynamic_rev(ext2_filsys fs)
186 struct ext2_super_block *sb = fs->super;
198 static errcode_t write_backup_super(ext2_filsys fs, dgrp_t group,
209 fs->super->s_block_group_nr = sgrp;
212 return io_channel_write_blk(fs->io, group_block, -SUPERBLOCK_SIZE,
217 errcode_t ext2fs_flush(ext2_filsys fs)
232 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
234 fs_state = fs->super->s_state;
235 feature_incompat = fs->super->s_feature_incompat;
237 fs->super->s_wtime = fs->now ? fs->now : time(NULL);
238 fs->super->s_block_group_nr = 0;
244 retval = ext2fs_get_array(fs->desc_blocks, fs->blocksize,
248 memset(group_shadow, 0, (size_t) fs->blocksize *
249 fs->desc_blocks);
252 for (j=0, s=fs->group_desc, t=group_shadow;
253 j < fs->group_desc_count; j++, t++, s++) {
258 super_shadow = fs->super;
259 group_shadow = fs->group_desc;
263 * Set the state of the FS to be non-valid. (The state has
267 fs->super->s_state &= ~EXT2_VALID_FS;
268 fs->super->s_feature_incompat &= ~EXT3_FEATURE_INCOMPAT_RECOVER;
270 *super_shadow = *fs->super;
278 if (fs->super->s_feature_incompat &
287 if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
288 old_desc_blocks = fs->super->s_first_meta_bg;
290 old_desc_blocks = fs->desc_blocks;
292 for (i = 0; i < fs->group_desc_count; i++) {
296 ext2fs_super_and_bgd_loc(fs, i, &super_blk, &old_desc_blk,
299 if (!(fs->flags & EXT2_FLAG_MASTER_SB_ONLY) &&i && super_blk) {
300 retval = write_backup_super(fs, i, super_blk,
305 if (fs->flags & EXT2_FLAG_SUPER_ONLY)
308 (!(fs->flags & EXT2_FLAG_MASTER_SB_ONLY) || (i == 0))) {
309 retval = io_channel_write_blk(fs->io,
315 retval = io_channel_write_blk(fs->io, new_desc_blk,
316 1, group_ptr + (meta_bg*fs->blocksize));
328 if (fs->write_bitmaps) {
329 retval = fs->write_bitmaps(fs);
343 fs->super->s_block_group_nr = 0;
344 fs->super->s_state = fs_state;
345 fs->super->s_feature_incompat = feature_incompat;
347 *super_shadow = *fs->super;
351 retval = io_channel_flush(fs->io);
352 retval = write_primary_superblock(fs, super_shadow);
356 fs->flags &= ~EXT2_FLAG_DIRTY;
358 retval = io_channel_flush(fs->io);
360 fs->super->s_state = fs_state;
370 errcode_t ext2fs_close(ext2_filsys fs)
376 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
378 if (fs->write_bitmaps) {
379 retval = fs->write_bitmaps(fs);
383 if (fs->super->s_kbytes_written &&
384 fs->io->manager->get_stats)
385 fs->io->manager->get_stats(fs->io, &stats);
386 if (stats && stats->bytes_written && (fs->flags & EXT2_FLAG_RW)) {
387 fs->super->s_kbytes_written += stats->bytes_written >> 10;
388 meta_blks = fs->desc_blocks + 1;
389 if (!(fs->flags & EXT2_FLAG_SUPER_ONLY))
390 fs->super->s_kbytes_written += meta_blks /
391 (fs->blocksize / 1024);
392 if ((fs->flags & EXT2_FLAG_DIRTY) == 0)
393 fs->flags |= EXT2_FLAG_SUPER_ONLY | EXT2_FLAG_DIRTY;
395 if (fs->flags & EXT2_FLAG_DIRTY) {
396 retval = ext2fs_flush(fs);
400 ext2fs_free(fs);