Ignore:
File:
1 edited

Legend:

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

    r8a45707d r38542dc  
    195195                uint32_t used_dirs = ext4_block_group_get_used_dirs_count(bg, sb);
    196196               
    197                 /*
    198                  * Check if this block group is a good candidate
    199                  * for allocation.
    200                  *
    201                  * The criterion is based on the average number
    202                  * of free inodes, unless we examine the last block
    203                  * group. In that case the last block group might
    204                  * have less than the average number of free inodes,
    205                  * but it still needs to be taken as a candidate
    206                  * because the previous block groups have zero free
    207                  * blocks.
    208                  */
    209                 if (((free_inodes >= avg_free_inodes) || (bgid == bg_count - 1)) &&
    210                     (free_blocks > 0)) {
     197                /* Check if this block group is good candidate for allocation */
     198                if ((free_inodes >= avg_free_inodes) && (free_blocks > 0)) {
    211199                        /* Load block with bitmap */
    212200                        uint32_t bitmap_block_addr = ext4_block_group_get_inode_bitmap(
     
    216204                        rc = block_get(&bitmap_block, fs->device, bitmap_block_addr,
    217205                            BLOCK_FLAGS_NONE);
    218                         if (rc != EOK) {
    219                                 ext4_filesystem_put_block_group_ref(bg_ref);
     206                        if (rc != EOK)
    220207                                return rc;
    221                         }
    222208                       
    223209                        /* Try to allocate i-node in the bitmap */
     
    229215                        /* Block group has not any free i-node */
    230216                        if (rc == ENOSPC) {
    231                                 rc = block_put(bitmap_block);
    232                                 if (rc != EOK) {
    233                                         ext4_filesystem_put_block_group_ref(bg_ref);
    234                                         return rc;
    235                                 }
    236 
    237                                 rc = ext4_filesystem_put_block_group_ref(bg_ref);
    238                                 if (rc != EOK)
    239                                         return rc;
    240 
    241                                 bgid++;
     217                                block_put(bitmap_block);
     218                                ext4_filesystem_put_block_group_ref(bg_ref);
    242219                                continue;
    243220                        }
     
    247224                       
    248225                        rc = block_put(bitmap_block);
    249                         if (rc != EOK) {
    250                                 ext4_filesystem_put_block_group_ref(bg_ref);
     226                        if (rc != EOK)
    251227                                return rc;
    252                         }
    253228                       
    254229                        /* Modify filesystem counters */
     
    297272               
    298273                /* Block group not modified, put it and jump to the next block group */
    299                 rc = ext4_filesystem_put_block_group_ref(bg_ref);
    300                 if (rc != EOK)
    301                         return rc;
    302 
     274                ext4_filesystem_put_block_group_ref(bg_ref);
    303275                ++bgid;
    304276        }
Note: See TracChangeset for help on using the changeset viewer.