aboutsummaryrefslogtreecommitdiffstats
path: root/mm/vmalloc.c
diff options
context:
space:
mode:
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