• E
    ext4: mark several more functions in mballoc.c as noinline · 089ceecc
    Eric Sandeen 提交于
    Ted noticed a stack-deep callchain through
    writepages->ext4_mb_regular_allocator->ext4_mb_init_cache->submit_bh ...
    
    With all the static functions in mballoc.c, gcc helpfully
    inlines for us, and we get something like this:
    
    ext4_mb_regular_allocator	(232 bytes stack)
    	ext4_mb_init_cache	(232 bytes stack)
    		submit_bh	(starts 464 deeper)
    
    the 2 ext4 functions here get several others inlined; by telling
    gcc not to inline them, we can save stack space for when we
    head off into submit_bh land and associated block layer callchains.
    The following noinlined functions are only called once, so this
    won't impact any other callchains:
    
    ext4_mb_regular_allocator 			(104) (was 232)
    	ext4_mb_find_by_goal			 (56) (noinlined)
    	ext4_mb_init_group			 (24) (noinlined)
    		ext4_mb_init_cache		(136) (was 232)
    			ext4_mb_generate_buddy	 (88) (noinlined)
    			ext4_mb_generate_from_pa (40) (noinlined)
    			submit_bh
    	ext4_mb_simple_scan_group		 (24) (noinlined)
    	ext4_mb_scan_aligned			 (56) (noinlined)
    	ext4_mb_complex_scan_group		 (40) (noinlined)
    	ext4_mb_try_best_found			 (24) (noinlined)
    
    now when we head off into submit_bh() we're only 264 bytes deeper
    in stack than when we entered ext4_mb_regular_allocator()
    (vs. 464 bytes before).  Every 200 bytes helps.  :)
    Signed-off-by: NEric Sandeen <sandeen@redhat.com>
    Signed-off-by: N"Theodore Ts'o" <tytso@mit.edu>
    089ceecc
mballoc.c 131.5 KB