• Lukas Czerner's avatar
    ext4: return error code from ext4_mb_good_group() · 42ac1848
    Lukas Czerner authored
    Currently ext4_mb_good_group() only returns 0 or 1 depending on whether
    the allocation group is suitable for use or not. However we might get
    various errors and fail while initializing new group including -EIO
    which would never get propagated up the call chain. This might lead to
    an endless loop at writeback when we're trying to find a good group to
    allocate from and we fail to initialize new group (read error for
    example).
    
    Fix this by returning proper error code from ext4_mb_good_group() and
    using it in ext4_mb_regular_allocator(). In ext4_mb_regular_allocator()
    we will always return only the first occurred error from
    ext4_mb_good_group() and we only propagate it back  to the caller if we
    do not get any other errors and we fail to allocate any blocks.
    
    Note that with other modes than errors=continue, we will fail
    immediately in ext4_mb_good_group() in case of error, however with
    errors=continue we should try to continue using the file system, that's
    why we're not going to fail immediately when we see an error from
    ext4_mb_good_group(), but rather when we fail to find a suitable block
    group to allocate from due to an problem in group initialization.
    Signed-off-by: default avatarLukas Czerner <lczerner@redhat.com>
    Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    42ac1848
mballoc.c 144 KB