fsw_ext4_group_first_block_no(struct ext4_super_block *sb, fsw_u32 group_no)
{
return group_no * (fsw_u32)EXT4_BLOCKS_PER_GROUP(sb) +
fsw_ext4_group_first_block_no(struct ext4_super_block *sb, fsw_u32 group_no)
{
return group_no * (fsw_u32)EXT4_BLOCKS_PER_GROUP(sb) +
if (vol->sb->s_rev_level == EXT4_DYNAMIC_REV &&
(vol->sb->s_feature_incompat & EXT4_FEATURE_INCOMPAT_RECOVER))
{
if (vol->sb->s_rev_level == EXT4_DYNAMIC_REV &&
(vol->sb->s_feature_incompat & EXT4_FEATURE_INCOMPAT_RECOVER))
{
vol->inotab_bno[groupno] = gdesc->bg_inode_table_lo;
fsw_block_release(vol, gdesc_bno, buffer);
vol->inotab_bno[groupno] = gdesc->bg_inode_table_lo;
fsw_block_release(vol, gdesc_bno, buffer);
- groupno = (dno->g.dnode_id - 1) / vol->sb->s_inodes_per_group;
- ino_in_group = (dno->g.dnode_id - 1) % vol->sb->s_inodes_per_group;
+ groupno = (fsw_u32) (dno->g.dnode_id - 1) / vol->sb->s_inodes_per_group;
+ ino_in_group = (fsw_u32) (dno->g.dnode_id - 1) % vol->sb->s_inodes_per_group;
ino_bno = vol->inotab_bno[groupno] +
ino_in_group / (vol->g.phys_blocksize / vol->inode_size);
ino_index = ino_in_group % (vol->g.phys_blocksize / vol->inode_size);
ino_bno = vol->inotab_bno[groupno] +
ino_in_group / (vol->g.phys_blocksize / vol->inode_size);
ino_index = ino_in_group % (vol->g.phys_blocksize / vol->inode_size);
struct fsw_dnode_stat *sb)
{
sb->used_bytes = dno->raw->i_blocks_lo * EXT4_BLOCK_SIZE(vol->sb); // very, very strange...
struct fsw_dnode_stat *sb)
{
sb->used_bytes = dno->raw->i_blocks_lo * EXT4_BLOCK_SIZE(vol->sb); // very, very strange...
- sb->store_time_posix(sb, FSW_DNODE_STAT_CTIME, dno->raw->i_ctime);
- sb->store_time_posix(sb, FSW_DNODE_STAT_ATIME, dno->raw->i_atime);
- sb->store_time_posix(sb, FSW_DNODE_STAT_MTIME, dno->raw->i_mtime);
- sb->store_attr_posix(sb, dno->raw->i_mode);
+ fsw_store_time_posix(sb, FSW_DNODE_STAT_CTIME, dno->raw->i_ctime);
+ fsw_store_time_posix(sb, FSW_DNODE_STAT_ATIME, dno->raw->i_atime);
+ fsw_store_time_posix(sb, FSW_DNODE_STAT_MTIME, dno->raw->i_mtime);
+ fsw_store_attr_posix(sb, dno->raw->i_mode);
buf_offset += sizeof(struct ext4_extent_header);
FSW_MSG_DEBUG((FSW_MSGSTR("fsw_ext4_get_by_extent: extent header with %d entries\n"),
ext4_extent_header->eh_entries));
buf_offset += sizeof(struct ext4_extent_header);
FSW_MSG_DEBUG((FSW_MSGSTR("fsw_ext4_get_by_extent: extent header with %d entries\n"),
ext4_extent_header->eh_entries));
if(ext4_extent_header->eh_depth == 0)
{
// Leaf node, the header follows actual extents
if(ext4_extent_header->eh_depth == 0)
{
// Leaf node, the header follows actual extents
buf_offset += sizeof(struct ext4_extent);
FSW_MSG_DEBUG((FSW_MSGSTR("fsw_ext4_get_by_extent: extent node cover %d...\n"), ext4_extent->ee_block));
buf_offset += sizeof(struct ext4_extent);
FSW_MSG_DEBUG((FSW_MSGSTR("fsw_ext4_get_by_extent: extent node cover %d...\n"), ext4_extent->ee_block));
{
FSW_MSG_DEBUG((FSW_MSGSTR("fsw_ext4_get_by_extent: index extents, depth %d\n"),
ext4_extent_header->eh_depth));
{
FSW_MSG_DEBUG((FSW_MSGSTR("fsw_ext4_get_by_extent: index extents, depth %d\n"),
ext4_extent_header->eh_depth));
FSW_MSG_DEBUG((FSW_MSGSTR("fsw_ext4_get_by_extent: index node covers block %d...\n"),
ext4_extent_idx->ei_block));
if(bno >= ext4_extent_idx->ei_block)
FSW_MSG_DEBUG((FSW_MSGSTR("fsw_ext4_get_by_extent: index node covers block %d...\n"),
ext4_extent_idx->ei_block));
if(bno >= ext4_extent_idx->ei_block)