]> git.karo-electronics.de Git - karo-tx-linux.git/commit
ext4: check for a good block group before loading buddy pages
authorCurt Wohlgemuth <curtw@google.com>
Sun, 16 May 2010 19:00:00 +0000 (15:00 -0400)
committerPaul Gortmaker <paul.gortmaker@windriver.com>
Thu, 6 Jan 2011 23:07:36 +0000 (18:07 -0500)
commitc3317c8cb549b98ecff014dcd6f718fefbf4a043
treee485f7b238273337af7105e905dd474a5eb05ffe
parent508982ae874515f1adff7c650a6067a83f790b5f
ext4: check for a good block group before loading buddy pages

commit 8a57d9d61a6e361c7bb159dda797672c1df1a691 upstream.

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: Curt Wohlgemuth <curtw@google.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
fs/ext4/ext4.h
fs/ext4/mballoc.c