|
@@ -910,7 +910,6 @@ static void *vb_alloc(unsigned long size, gfp_t gfp_mask)
|
|
|
struct vmap_block *vb;
|
|
|
unsigned long addr = 0;
|
|
|
unsigned int order;
|
|
|
- int purge = 0;
|
|
|
|
|
|
BUG_ON(size & ~PAGE_MASK);
|
|
|
BUG_ON(size > PAGE_SIZE*VMAP_MAX_ALLOC);
|
|
@@ -934,17 +933,7 @@ again:
|
|
|
if (vb->free < 1UL << order)
|
|
|
goto next;
|
|
|
|
|
|
- i = bitmap_find_free_region(vb->alloc_map,
|
|
|
- VMAP_BBMAP_BITS, order);
|
|
|
-
|
|
|
- if (i < 0) {
|
|
|
- if (vb->free + vb->dirty == VMAP_BBMAP_BITS) {
|
|
|
- /* fragmented and no outstanding allocations */
|
|
|
- BUG_ON(vb->dirty != VMAP_BBMAP_BITS);
|
|
|
- purge = 1;
|
|
|
- }
|
|
|
- goto next;
|
|
|
- }
|
|
|
+ i = VMAP_BBMAP_BITS - vb->free;
|
|
|
addr = vb->va->va_start + (i << PAGE_SHIFT);
|
|
|
BUG_ON(addr_to_vb_idx(addr) !=
|
|
|
addr_to_vb_idx(vb->va->va_start));
|
|
@@ -960,9 +949,6 @@ next:
|
|
|
spin_unlock(&vb->lock);
|
|
|
}
|
|
|
|
|
|
- if (purge)
|
|
|
- purge_fragmented_blocks_thiscpu();
|
|
|
-
|
|
|
put_cpu_var(vmap_block_queue);
|
|
|
rcu_read_unlock();
|
|
|
|