Lines Matching defs:fs

34 	ext2_filsys		fs;
47 errcode_t (*done_group)(ext2_filsys fs,
60 errcode_t ext2fs_flush_icache(ext2_filsys fs)
64 if (!fs->icache)
67 for (i=0; i < fs->icache->cache_size; i++)
68 fs->icache->cache[i].ino = 0;
70 fs->icache->buffer_blk = 0;
74 static errcode_t create_icache(ext2_filsys fs)
78 if (fs->icache)
80 retval = ext2fs_get_mem(sizeof(struct ext2_inode_cache), &fs->icache);
84 memset(fs->icache, 0, sizeof(struct ext2_inode_cache));
85 retval = ext2fs_get_mem(fs->blocksize, &fs->icache->buffer);
87 ext2fs_free_mem(&fs->icache);
90 fs->icache->buffer_blk = 0;
91 fs->icache->cache_last = -1;
92 fs->icache->cache_size = 4;
93 fs->icache->refcount = 1;
94 retval = ext2fs_get_array(fs->icache->cache_size,
96 &fs->icache->cache);
98 ext2fs_free_mem(&fs->icache->buffer);
99 ext2fs_free_mem(&fs->icache);
102 ext2fs_flush_icache(fs);
106 errcode_t ext2fs_open_inode_scan(ext2_filsys fs, int buffer_blocks,
113 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
116 * If fs->badblocks isn't set, then set it --- since the inode
119 if (fs->badblocks == 0) {
121 * Temporarly save fs->get_blocks and set it to zero,
124 save_get_blocks = fs->get_blocks;
125 fs->get_blocks = 0;
126 retval = ext2fs_read_bb_inode(fs, &fs->badblocks);
127 if (retval && fs->badblocks) {
128 ext2fs_badblocks_list_free(fs->badblocks);
129 fs->badblocks = 0;
131 fs->get_blocks = save_get_blocks;
140 scan->fs = fs;
141 scan->inode_size = EXT2_INODE_SIZE(fs->super);
144 scan->groups_left = fs->group_desc_count - 1;
146 scan->current_block = ext2fs_inode_table_loc(scan->fs,
148 scan->inodes_left = EXT2_INODES_PER_GROUP(scan->fs->super);
149 scan->blocks_left = scan->fs->inode_blocks_per_group;
150 if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
153 ext2fs_bg_itable_unused(fs, scan->current_group);
156 (fs->blocksize / scan->inode_size - 1)) *
157 scan->inode_size / fs->blocksize;
159 retval = io_channel_alloc_buf(fs->io, scan->inode_buffer_blocks,
174 if (scan->fs->badblocks && scan->fs->badblocks->num)
176 if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
197 errcode_t (*done_group)(ext2_filsys fs,
230 ext2_filsys fs = scan->fs;
235 scan->current_block = ext2fs_inode_table_loc(scan->fs,
238 EXT2_INODES_PER_GROUP(fs->super);
241 scan->inodes_left = EXT2_INODES_PER_GROUP(fs->super);
242 scan->blocks_left = fs->inode_blocks_per_group;
243 if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
246 ext2fs_bg_itable_unused(fs, scan->current_group);
249 (fs->blocksize / scan->inode_size - 1)) *
250 scan->inode_size / fs->blocksize;
260 scan->groups_left = scan->fs->group_desc_count - group;
275 badblocks_list bb = scan->fs->badblocks;
365 (size_t) num_blocks * scan->fs->blocksize);
367 retval = io_channel_read_blk64(scan->fs->io,
375 scan->bytes_left = num_blocks * scan->fs->blocksize;
419 (scan->fs, scan, scan->current_group,
437 (ext2fs_bg_flags_test(scan->fs, scan->current_group, EXT2_BG_INODE_UNINIT)
480 ext2fs_swap_inode_full(scan->fs,
493 ext2fs_swap_inode_full(scan->fs,
522 errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
532 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
535 if (fs->read_inode &&
537 (EXT2_INODE_SIZE(fs->super) == sizeof(struct ext2_inode)))) {
538 retval = (fs->read_inode)(fs, ino, inode);
542 if ((ino == 0) || (ino > fs->super->s_inodes_count))
545 if (!fs->icache) {
546 retval = create_icache(fs);
553 for (i=0; i < fs->icache->cache_size; i++) {
554 if (fs->icache->cache[i].ino == ino) {
555 *inode = fs->icache->cache[i].inode;
560 if (fs->flags & EXT2_FLAG_IMAGE_FILE) {
561 inodes_per_block = fs->blocksize / EXT2_INODE_SIZE(fs->super);
562 block_nr = fs->image_header->offset_inode / fs->blocksize;
565 EXT2_INODE_SIZE(fs->super);
566 io = fs->image_io;
568 group = (ino - 1) / EXT2_INODES_PER_GROUP(fs->super);
569 if (group > fs->group_desc_count)
571 offset = ((ino - 1) % EXT2_INODES_PER_GROUP(fs->super)) *
572 EXT2_INODE_SIZE(fs->super);
573 block = offset >> EXT2_BLOCK_SIZE_BITS(fs->super);
574 if (!ext2fs_inode_table_loc(fs, (unsigned) group))
576 block_nr = ext2fs_inode_table_loc(fs, group) +
578 io = fs->io;
580 offset &= (EXT2_BLOCK_SIZE(fs->super) - 1);
582 length = EXT2_INODE_SIZE(fs->super);
589 if ((offset + length) > fs->blocksize)
590 clen = fs->blocksize - offset;
592 if (block_nr != fs->icache->buffer_blk) {
594 fs->icache->buffer);
597 fs->icache->buffer_blk = block_nr;
600 memcpy(ptr, ((char *) fs->icache->buffer) + (unsigned) offset,
610 ext2fs_swap_inode_full(fs, (struct ext2_inode_large *) inode,
616 fs->icache->cache_last = (fs->icache->cache_last + 1) %
617 fs->icache->cache_size;
618 fs->icache->cache[fs->icache->cache_last].ino = ino;
619 fs->icache->cache[fs->icache->cache_last].inode = *inode;
624 errcode_t ext2fs_read_inode(ext2_filsys fs, ext2_ino_t ino,
627 return ext2fs_read_inode_full(fs, ino, inode,
631 errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
641 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
644 if (fs->write_inode) {
645 retval = (fs->write_inode)(fs, ino, inode);
651 if (fs->icache) {
652 for (i=0; i < fs->icache->cache_size; i++) {
653 if (fs->icache->cache[i].ino == ino) {
654 fs->icache->cache[i].inode = *inode;
659 retval = create_icache(fs);
664 if (!(fs->flags & EXT2_FLAG_RW))
667 if ((ino == 0) || (ino > fs->super->s_inodes_count))
671 if (length < EXT2_INODE_SIZE(fs->super))
672 length = EXT2_INODE_SIZE(fs->super);
685 ext2fs_swap_inode_full(fs, w_inode,
692 group = (ino - 1) / EXT2_INODES_PER_GROUP(fs->super);
693 offset = ((ino - 1) % EXT2_INODES_PER_GROUP(fs->super)) *
694 EXT2_INODE_SIZE(fs->super);
695 block = offset >> EXT2_BLOCK_SIZE_BITS(fs->super);
696 if (!ext2fs_inode_table_loc(fs, (unsigned) group)) {
700 block_nr = ext2fs_inode_table_loc(fs, (unsigned) group) + block;
702 offset &= (EXT2_BLOCK_SIZE(fs->super) - 1);
704 length = EXT2_INODE_SIZE(fs->super);
712 if ((offset + length) > fs->blocksize)
713 clen = fs->blocksize - offset;
715 if (fs->icache->buffer_blk != block_nr) {
716 retval = io_channel_read_blk64(fs->io, block_nr, 1,
717 fs->icache->buffer);
720 fs->icache->buffer_blk = block_nr;
724 memcpy((char *) fs->icache->buffer + (unsigned) offset,
727 retval = io_channel_write_blk64(fs->io, block_nr, 1,
728 fs->icache->buffer);
738 fs->flags |= EXT2_FLAG_CHANGED;
745 errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino,
748 return ext2fs_write_inode_full(fs, ino, inode,
756 errcode_t ext2fs_write_new_inode(ext2_filsys fs, ext2_ino_t ino,
760 int size = EXT2_INODE_SIZE(fs->super);
763 __u32 t = fs->now ? fs->now : time(NULL);
773 return ext2fs_write_inode_full(fs, ino, inode,
789 retval = ext2fs_write_inode_full(fs, ino, buf, size);
795 errcode_t ext2fs_get_blocks(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks)
801 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
803 if (ino > fs->super->s_inodes_count)
806 if (fs->get_blocks) {
807 if (!(*fs->get_blocks)(fs, ino, blocks))
810 retval = ext2fs_read_inode(fs, ino, &inode);
818 errcode_t ext2fs_check_directory(ext2_filsys fs, ext2_ino_t ino)
823 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
825 if (ino > fs->super->s_inodes_count)
828 if (fs->check_directory) {
829 retval = (fs->check_directory)(fs, ino);
833 retval = ext2fs_read_inode(fs, ino, &inode);