Ignore:
Timestamp:
2012-04-04T19:17:05Z (12 years ago)
Author:
Frantisek Princ <frantisek.princ@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
9c2d19d
Parents:
e7ed26be
Message:

developement version of releasing more complex extent tree with nontrivial depth (> 0)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ext4/libext4_filesystem.c

    re7ed26be r5b0a3946  
    216216
    217217        if (ref->dirty) {
    218                  uint16_t checksum = ext4_filesystem_bg_checksum(
     218                uint16_t checksum = ext4_filesystem_bg_checksum(
    219219                                ref->fs->superblock, ref->index, ref->block_group);
    220220
    221                  ext4_block_group_set_checksum(ref->block_group, checksum);
     221                ext4_block_group_set_checksum(ref->block_group, checksum);
    222222
    223223                ref->block->dirty = true;
     
    523523        }
    524524
    525         // starting from 1 because of logical blocks are numbered from 0
    526         for (uint32_t i = 1; i <= diff_blocks_count; ++i) {
    527                 rc = ext4_filesystem_release_inode_block(inode_ref, old_blocks_count - i);
    528                 if (rc != EOK) {
    529                         return rc;
     525        if (ext4_superblock_has_feature_incompatible(
     526                        inode_ref->fs->superblock, EXT4_FEATURE_INCOMPAT_EXTENTS) &&
     527                                ext4_inode_has_flag(inode_ref->inode, EXT4_INODE_FLAG_EXTENTS)) {
     528
     529                rc = ext4_extent_release_blocks_from(inode_ref, old_blocks_count - diff_blocks_count);
     530                if (rc != EOK) {
     531                        return rc;
     532                }
     533        } else {
     534                // starting from 1 because of logical blocks are numbered from 0
     535                for (uint32_t i = 1; i <= diff_blocks_count; ++i) {
     536                        rc = ext4_filesystem_release_inode_block(inode_ref, old_blocks_count - i);
     537                        if (rc != EOK) {
     538                                return rc;
     539                        }
    530540                }
    531541        }
     
    783793        ext4_filesystem_t *fs = inode_ref->fs;
    784794
    785         if (ext4_superblock_has_feature_incompatible(fs->superblock, EXT4_FEATURE_INCOMPAT_EXTENTS) &&
    786                         ext4_inode_has_flag(inode_ref->inode, EXT4_INODE_FLAG_EXTENTS)) {
    787 
    788                 return ext4_extent_release_block(inode_ref, iblock);
    789         }
     795        // EXTENTS are handled
     796        assert(! (ext4_superblock_has_feature_incompatible(fs->superblock,
     797                        EXT4_FEATURE_INCOMPAT_EXTENTS) &&
     798                        ext4_inode_has_flag(inode_ref->inode, EXT4_INODE_FLAG_EXTENTS)));
    790799
    791800        ext4_inode_t *inode = inode_ref->inode;
Note: See TracChangeset for help on using the changeset viewer.