diff options
author | Zhang Yanfei <zhangyanfei@cn.fujitsu.com> | 2013-07-08 18:59:54 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-07-09 13:33:20 -0400 |
commit | 3fcd76e8028e0be37b02a2002b4f56755daeda06 (patch) | |
tree | 452c848c3c7f664e28911062076207c14db940d0 /mm/vmalloc.c | |
parent | ab15d9b4cbc2b6497023f554a152c2573ca53671 (diff) |
mm/vmalloc.c: remove dead code in vb_alloc
Space in a vmap block that was once allocated is considered dirty and
not made available for allocation again before the whole block is
recycled. The result is that free space within a vmap block is always
contiguous.
So if a vmap block has enough free space for allocation, the allocation
is impossible to fail. Thus, the fragmented block purging was never
invoked from vb_alloc(). So remove this dead code.
[ Same patches also sent by:
Chanho Min <chanho.min@lge.com>
Johannes Weiner <hannes@cmpxchg.org>
but git doesn't do "multiple authors" ]
Signed-off-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Mel Gorman <mel@csn.ul.ie>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/vmalloc.c')
-rw-r--r-- | mm/vmalloc.c | 16 |
1 files changed, 1 insertions, 15 deletions
diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 96b77a982545..a35f4f5bb908 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c | |||
@@ -910,7 +910,6 @@ static void *vb_alloc(unsigned long size, gfp_t gfp_mask) | |||
910 | struct vmap_block *vb; | 910 | struct vmap_block *vb; |
911 | unsigned long addr = 0; | 911 | unsigned long addr = 0; |
912 | unsigned int order; | 912 | unsigned int order; |
913 | int purge = 0; | ||
914 | 913 | ||
915 | BUG_ON(size & ~PAGE_MASK); | 914 | BUG_ON(size & ~PAGE_MASK); |
916 | BUG_ON(size > PAGE_SIZE*VMAP_MAX_ALLOC); | 915 | BUG_ON(size > PAGE_SIZE*VMAP_MAX_ALLOC); |
@@ -934,17 +933,7 @@ again: | |||
934 | if (vb->free < 1UL << order) | 933 | if (vb->free < 1UL << order) |
935 | goto next; | 934 | goto next; |
936 | 935 | ||
937 | i = bitmap_find_free_region(vb->alloc_map, | 936 | i = VMAP_BBMAP_BITS - vb->free; |
938 | VMAP_BBMAP_BITS, order); | ||
939 | |||
940 | if (i < 0) { | ||
941 | if (vb->free + vb->dirty == VMAP_BBMAP_BITS) { | ||
942 | /* fragmented and no outstanding allocations */ | ||
943 | BUG_ON(vb->dirty != VMAP_BBMAP_BITS); | ||
944 | purge = 1; | ||
945 | } | ||
946 | goto next; | ||
947 | } | ||
948 | addr = vb->va->va_start + (i << PAGE_SHIFT); | 937 | addr = vb->va->va_start + (i << PAGE_SHIFT); |
949 | BUG_ON(addr_to_vb_idx(addr) != | 938 | BUG_ON(addr_to_vb_idx(addr) != |
950 | addr_to_vb_idx(vb->va->va_start)); | 939 | addr_to_vb_idx(vb->va->va_start)); |
@@ -960,9 +949,6 @@ next: | |||
960 | spin_unlock(&vb->lock); | 949 | spin_unlock(&vb->lock); |
961 | } | 950 | } |
962 | 951 | ||
963 | if (purge) | ||
964 | purge_fragmented_blocks_thiscpu(); | ||
965 | |||
966 | put_cpu_var(vmap_block_queue); | 952 | put_cpu_var(vmap_block_queue); |
967 | rcu_read_unlock(); | 953 | rcu_read_unlock(); |
968 | 954 | ||