• Eric Sandeen's avatar
    ext4: Fix bug where we return ENOSPC even though we have plenty of inodes · c001077f
    Eric Sandeen authored
    The find_group_flex() function starts with best_flex as the
    parent_fbg_group, which happens to have 0 inodes free.  Some of the
    flex groups searched have free blocks and free inodes, but the
    flex_freeb_ratio is < 10, so they're skipped.  Then when a group is
    compared to the current "best" flex group, it does not have more free
    blocks than "best", so it is skipped as well.
    
    This continues until no flex group with free inodes is found which has
    a proper ratio or which has more free blocks than the "best" group,
    and we're left with a "best" group that has 0 inodes free, and we
    return -ENOSPC.
    
    We fix this by changing the logic so that if the current "best" flex
    group has no inodes free, and the current one does have room, it is
    promoted to the next "best."
    Signed-off-by: default avatarEric Sandeen <sandeen@redhat.com>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    c001077f
ialloc.c 28.5 KB