Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mmap.c: deinline a few functions

__vma_link_file and expand_downwards functions are not small, yeat they
are marked inline. They probably had one callsite sometime in the past,
but now they have more. In order to prevent similar thing, I also
deinlined expand_upwards, despite it having only pne callsite. Nowadays
gcc auto-inlines such static functions anyway. In find_extend_vma, I
removed one extra level of indirection.

Patch is deliberately generated with -U $BIGNUM to make
it easier to see that functions are big.

Result:

# size */*/mmap.o */vmlinux
text data bss dec hex filename
9514 188 16 9718 25f6 0.org/mm/mmap.o
9237 188 16 9441 24e1 deinline/mm/mmap.o
6124402 858996 389480 7372878 70804e 0.org/vmlinux
6124113 858996 389480 7372589 707f2d deinline/vmlinux

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Cc: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Denys Vlasenko and committed by
Linus Torvalds
cb8f488c 51b07fc3

+4 -4
+4 -4
mm/mmap.c
··· 410 410 rb_insert_color(&vma->vm_rb, &mm->mm_rb); 411 411 } 412 412 413 - static inline void __vma_link_file(struct vm_area_struct *vma) 413 + static void __vma_link_file(struct vm_area_struct *vma) 414 414 { 415 415 struct file * file; 416 416 ··· 1591 1591 * vma is the last one with address > vma->vm_end. Have to extend vma. 1592 1592 */ 1593 1593 #ifndef CONFIG_IA64 1594 - static inline 1594 + static 1595 1595 #endif 1596 1596 int expand_upwards(struct vm_area_struct *vma, unsigned long address) 1597 1597 { ··· 1641 1641 /* 1642 1642 * vma is the first one with address < vma->vm_start. Have to extend vma. 1643 1643 */ 1644 - static inline int expand_downwards(struct vm_area_struct *vma, 1644 + static int expand_downwards(struct vm_area_struct *vma, 1645 1645 unsigned long address) 1646 1646 { 1647 1647 int error; ··· 1703 1703 vma = find_vma_prev(mm, addr, &prev); 1704 1704 if (vma && (vma->vm_start <= addr)) 1705 1705 return vma; 1706 - if (!prev || expand_stack(prev, addr)) 1706 + if (expand_stack(prev, addr)) 1707 1707 return NULL; 1708 1708 if (prev->vm_flags & VM_LOCKED) { 1709 1709 if (mlock_vma_pages_range(prev, addr, prev->vm_end) < 0)