ext3: Avoid loading bitmaps for full groups during block allocation
authorFrans van de Wiel <fvdw@fvdw.eu>
Mon, 15 Mar 2010 18:29:34 +0000 (19:29 +0100)
committerJan Kara <jack@suse.cz>
Fri, 21 May 2010 17:30:36 +0000 (19:30 +0200)
There is no point in loading bitmap for groups which are completely full.
This causes noticeable performance problems (and memory pressure) on small
systems with large full filesystem
(http://marc.info/?l=linux-ext4&m=126843108314310&w=2).

Jan Kara: Added a comment and changed check to use cpu-endian value.

Signed-off-by: "Frans van de Wiel" <fvdw@fvdw.eu>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/ext3/balloc.c

index a177122a1b2584170d609b0282bf1fd094bd86b9..4a32511f4deda7f75b45aeb719d41407e416cb55 100644 (file)
@@ -1583,6 +1583,12 @@ retry_alloc:
                if (!gdp)
                        goto io_error;
                free_blocks = le16_to_cpu(gdp->bg_free_blocks_count);
+               /*
+                * skip this group (and avoid loading bitmap) if there
+                * are no free blocks
+                */
+               if (!free_blocks)
+                       continue;
                /*
                 * skip this group if the number of
                 * free blocks is less than half of the reservation