aboutsummaryrefslogtreecommitdiffstats
path: root/mm/vmalloc.c
diff options
context:
space:
mode:
authorZhang Yanfei <zhangyanfei@cn.fujitsu.com>2013-07-08 18:59:54 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-07-09 13:33:20 -0400
commit3fcd76e8028e0be37b02a2002b4f56755daeda06 (patch)
tree452c848c3c7f664e28911062076207c14db940d0 /mm/vmalloc.c
parentab15d9b4cbc2b6497023f554a152c2573ca53671 (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.c16
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