aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShaohua Li <shli@kernel.org>2013-02-22 19:34:35 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-02-23 20:50:17 -0500
commit9800339b5e0f0e24ab3dac349e0de80d2018832e (patch)
tree7f0cc5d46cbf881729ff3b2d97f425570674c95d
parent340ef3902cf20cec43cdcd1e72ae5cb518be7328 (diff)
mm: don't inline page_mapping()
According to akpm, this saves 1/2k text and makes things simple for the next patch. Numbers from Minchan: add/remove: 1/0 grow/shrink: 6/22 up/down: 92/-516 (-424) function old new delta page_mapping - 48 +48 do_task_stat 2292 2308 +16 page_remove_rmap 240 248 +8 load_elf_binary 4500 4508 +8 update_queue 532 536 +4 scsi_probe_and_add_lun 2892 2896 +4 lookup_fast 644 648 +4 vcs_read 1040 1036 -4 __ip_route_output_key 1904 1900 -4 ip_route_input_noref 2508 2500 -8 shmem_file_aio_read 784 772 -12 __isolate_lru_page 272 256 -16 shmem_replace_page 708 688 -20 mark_buffer_dirty 228 208 -20 __set_page_dirty_buffers 240 220 -20 __remove_mapping 276 256 -20 update_mmu_cache 500 476 -24 set_page_dirty_balance 92 68 -24 set_page_dirty 172 148 -24 page_evictable 88 64 -24 page_cache_pipe_buf_steal 248 224 -24 clear_page_dirty_for_io 340 316 -24 test_set_page_writeback 400 372 -28 test_clear_page_writeback 516 488 -28 invalidate_inode_page 156 128 -28 page_mkclean 432 400 -32 flush_dcache_page 360 328 -32 __set_page_dirty_nobuffers 324 280 -44 shrink_page_list 2412 2356 -56 Signed-off-by: Shaohua Li <shli@fusionio.com> Suggested-by: Andrew Morton <akpm@linux-foundation.org> Cc: Hugh Dickins <hughd@google.com> Acked-by: Rik van Riel <riel@redhat.com> Cc: Minchan Kim <minchan.kim@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--include/linux/mm.h13
-rw-r--r--mm/util.c16
2 files changed, 17 insertions, 12 deletions
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 473abbda942e..1d4122bf6f27 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -809,18 +809,7 @@ void page_address_init(void);
809#define PAGE_MAPPING_KSM 2 809#define PAGE_MAPPING_KSM 2
810#define PAGE_MAPPING_FLAGS (PAGE_MAPPING_ANON | PAGE_MAPPING_KSM) 810#define PAGE_MAPPING_FLAGS (PAGE_MAPPING_ANON | PAGE_MAPPING_KSM)
811 811
812extern struct address_space swapper_space; 812extern struct address_space *page_mapping(struct page *page);
813static inline struct address_space *page_mapping(struct page *page)
814{
815 struct address_space *mapping = page->mapping;
816
817 VM_BUG_ON(PageSlab(page));
818 if (unlikely(PageSwapCache(page)))
819 mapping = &swapper_space;
820 else if ((unsigned long)mapping & PAGE_MAPPING_ANON)
821 mapping = NULL;
822 return mapping;
823}
824 813
825/* Neutral page->mapping pointer to address_space or anon_vma or other */ 814/* Neutral page->mapping pointer to address_space or anon_vma or other */
826static inline void *page_rmapping(struct page *page) 815static inline void *page_rmapping(struct page *page)
diff --git a/mm/util.c b/mm/util.c
index 3704bf1bef94..16a73195a37b 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -5,6 +5,7 @@
5#include <linux/err.h> 5#include <linux/err.h>
6#include <linux/sched.h> 6#include <linux/sched.h>
7#include <linux/security.h> 7#include <linux/security.h>
8#include <linux/swap.h>
8#include <asm/uaccess.h> 9#include <asm/uaccess.h>
9 10
10#include "internal.h" 11#include "internal.h"
@@ -382,6 +383,21 @@ unsigned long vm_mmap(struct file *file, unsigned long addr,
382} 383}
383EXPORT_SYMBOL(vm_mmap); 384EXPORT_SYMBOL(vm_mmap);
384 385
386struct address_space *page_mapping(struct page *page)
387{
388 struct address_space *mapping = page->mapping;
389
390 VM_BUG_ON(PageSlab(page));
391#ifdef CONFIG_SWAP
392 if (unlikely(PageSwapCache(page)))
393 mapping = &swapper_space;
394 else
395#endif
396 if ((unsigned long)mapping & PAGE_MAPPING_ANON)
397 mapping = NULL;
398 return mapping;
399}
400
385/* Tracepoints definitions. */ 401/* Tracepoints definitions. */
386EXPORT_TRACEPOINT_SYMBOL(kmalloc); 402EXPORT_TRACEPOINT_SYMBOL(kmalloc);
387EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc); 403EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc);