Changeset 8a45707d in mainline


Ignore:
Timestamp:
2015-09-18T15:08:40Z (9 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d6c98451
Parents:
c354a08
Message:

avoid the corner case where the last block group is the only block group with free blocks, but it has lower than average number of free inodes
(this bug rendered the rest of the free blocks on the file system unusable for new inodes)

File:
1 edited

Legend:

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

    rc354a08 r8a45707d  
    195195                uint32_t used_dirs = ext4_block_group_get_used_dirs_count(bg, sb);
    196196               
    197                 /* Check if this block group is good candidate for allocation */
    198                 if ((free_inodes >= avg_free_inodes) && (free_blocks > 0)) {
     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)) {
    199211                        /* Load block with bitmap */
    200212                        uint32_t bitmap_block_addr = ext4_block_group_get_inode_bitmap(
Note: See TracChangeset for help on using the changeset viewer.