Lines Matching refs:fs
80 static int fill_dir_block(ext2_filsys fs,
97 offset = blockcnt * fs->blocksize;
98 if (offset + fs->blocksize > fd->inode->i_size) {
104 memset(dir, 0, fs->blocksize);
106 (void) ext2fs_set_rec_len(fs, fs->blocksize, dirent);
108 fd->err = ext2fs_read_dir_block(fs, *block_nr, dir);
112 hash_alg = fs->super->s_def_hash_version;
114 (fs->super->s_flags & EXT2_FLAGS_UNSIGNED_HASH))
118 while (dir_offset < fs->blocksize) {
120 (void) ext2fs_get_rec_len(fs, dirent, &rec_len);
121 if (((dir_offset + rec_len) > fs->blocksize) ||
158 fs->super->s_hash_seed,
223 static errcode_t alloc_size_dir(ext2_filsys fs, struct out_dir *outdir,
229 new_mem = realloc(outdir->buf, blocks * fs->blocksize);
239 outdir->buf = malloc(blocks * fs->blocksize);
255 static errcode_t get_next_block(ext2_filsys fs, struct out_dir *outdir,
261 retval = alloc_size_dir(fs, outdir, outdir->max + 50);
265 *ret = outdir->buf + (outdir->num++ * fs->blocksize);
266 memset(*ret, 0, fs->blocksize);
330 static int duplicate_search_and_fix(e2fsck_t ctx, ext2_filsys fs,
345 hash_alg = fs->super->s_def_hash_version;
347 (fs->super->s_flags & EXT2_FLAGS_UNSIGNED_HASH))
388 fs->super->s_hash_seed,
401 ext2_filsys fs = ctx->fs;
421 retval = alloc_size_dir(fs, outdir,
422 (fd->dir_size / fs->blocksize) + 2);
429 if ((retval = get_next_block(fs, outdir, &block_start)))
433 left = fs->blocksize;
435 (fs->blocksize * ctx->htree_slack_percentage)/100;
446 retval = ext2fs_set_rec_len(fs, left, dirent);
450 if ((retval = get_next_block(fs, outdir,
455 left = fs->blocksize - offset;
465 retval = ext2fs_set_rec_len(fs, rec_len, dirent);
474 retval = ext2fs_set_rec_len(fs, prev_rec_len, dirent);
483 retval = ext2fs_set_rec_len(fs, rec_len + left, dirent);
489 static struct ext2_dx_root_info *set_root_node(ext2_filsys fs, char *buf,
497 if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_FILETYPE)
500 memset(buf, 0, fs->blocksize);
511 dir->rec_len = fs->blocksize - 12;
515 root->hash_version = fs->super->s_def_hash_version;
521 limits->limit = (fs->blocksize - 32) / sizeof(struct ext2_dx_entry);
528 static struct ext2_dx_entry *set_int_node(ext2_filsys fs, char *buf)
533 memset(buf, 0, fs->blocksize);
536 (void) ext2fs_set_rec_len(fs, fs->blocksize, dir);
539 limits->limit = (fs->blocksize - 8) / sizeof(struct ext2_dx_entry);
549 static errcode_t calculate_tree(ext2_filsys fs,
562 root_info = set_root_node(fs, outdir->buf, ino, parent);
598 if ((retval = get_next_block(fs, outdir,
601 dx_ent = set_int_node(fs, block_start);
634 static int write_dir_block(ext2_filsys fs,
651 ext2fs_block_alloc_stats(fs, blk, -1);
659 dir = wd->outdir->buf + (blockcnt * fs->blocksize);
660 wd->err = ext2fs_write_dir_block(fs, *block_nr, dir);
666 static errcode_t write_directory(e2fsck_t ctx, ext2_filsys fs,
683 retval = ext2fs_block_iterate2(fs, ino, 0, 0,
695 inode.i_size = outdir->num * fs->blocksize;
696 ext2fs_iblk_sub_blocks(fs, &inode, wd.cleared);
704 ext2_filsys fs = ctx->fs;
734 if (!(fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_DIR_INDEX) ||
735 (inode.i_size / fs->blocksize) < 2)
741 retval = ext2fs_block_iterate2(fs, ino, 0, 0,
752 if (!fd.compress && (fd.dir_size < (fs->blocksize - 24))) {
776 if (duplicate_search_and_fix(ctx, fs, ino, &fd))
801 retval = calculate_tree(fs, &outdir, ino, fd.parent);
806 retval = write_directory(ctx, fs, &outdir, ino, fd.compress);
831 init_resource_track(&rtrack, ctx->fs->io);
841 dir_index = ctx->fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_DIR_INDEX;
895 print_resource_track(ctx, "Pass 3A", &rtrack, ctx->fs->io);