• Curt Wohlgemuth's avatar
    ext4: check for a good block group before loading buddy pages · 8a57d9d6
    Curt Wohlgemuth authored
    This adds a new field in ext4_group_info to cache the largest available
    block range in a block group; and don't load the buddy pages until *after*
    we've done a sanity check on the block group.
    
    With large allocation requests (e.g., fallocate(), 8MiB) and relatively full
    partitions, it's easy to have no block groups with a block extent large
    enough to satisfy the input request length.  This currently causes the loop
    during cr == 0 in ext4_mb_regular_allocator() to load the buddy bitmap pages
    for EVERY block group.  That can be a lot of pages.  The patch below allows
    us to call ext4_mb_good_group() BEFORE we load the buddy pages (although we
    have check again after we lock the block group).
    
    Addresses-Google-Bug: #2578108
    Addresses-Google-Bug: #2704453
    Signed-off-by: default avatarCurt Wohlgemuth <curtw@google.com>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    8a57d9d6
ext4.h 63.3 KB