• Theodore Ts'o's avatar
    ext4: add cond_resched() to ext4_free_blocks() & ext4_mb_regular_allocator() · 2ed5724d
    Theodore Ts'o authored
    For a file systems with a very large number of block groups, if all of
    the block group bitmaps are in memory and the file system is
    relatively badly fragmented, it's possible ext4_mb_regular_allocator()
    to take a long time trying to find a good match.  This is especially
    true if the tuning parameter mb_max_to_scan has been sent to a very
    large number.  So add a cond_resched() to avoid soft lockup warnings
    and to provide better system responsiveness.
    
    For ext4_free_blocks(), if we are deleting a large range of blocks,
    and data=journal is enabled so that EXT4_FREE_BLOCKS_FORGET is passed,
    the loop to call sb_find_get_block() and to call ext4_forget() can
    take over 10-15 milliseocnds or more.  So it's better to add a
    cond_resched() here a well.
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    
    
    2ed5724d
mballoc.c 141 KB