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>
This commit is contained in:
parent
ab15d9b4cb
commit
3fcd76e802
16
mm/vmalloc.c
16
mm/vmalloc.c
|
@ -910,7 +910,6 @@ static void *vb_alloc(unsigned long size, gfp_t gfp_mask)
|
||||||
struct vmap_block *vb;
|
struct vmap_block *vb;
|
||||||
unsigned long addr = 0;
|
unsigned long addr = 0;
|
||||||
unsigned int order;
|
unsigned int order;
|
||||||
int purge = 0;
|
|
||||||
|
|
||||||
BUG_ON(size & ~PAGE_MASK);
|
BUG_ON(size & ~PAGE_MASK);
|
||||||
BUG_ON(size > PAGE_SIZE*VMAP_MAX_ALLOC);
|
BUG_ON(size > PAGE_SIZE*VMAP_MAX_ALLOC);
|
||||||
|
@ -934,17 +933,7 @@ again:
|
||||||
if (vb->free < 1UL << order)
|
if (vb->free < 1UL << order)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
i = bitmap_find_free_region(vb->alloc_map,
|
i = VMAP_BBMAP_BITS - vb->free;
|
||||||
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;
|
|
||||||
}
|
|
||||||
addr = vb->va->va_start + (i << PAGE_SHIFT);
|
addr = vb->va->va_start + (i << PAGE_SHIFT);
|
||||||
BUG_ON(addr_to_vb_idx(addr) !=
|
BUG_ON(addr_to_vb_idx(addr) !=
|
||||||
addr_to_vb_idx(vb->va->va_start));
|
addr_to_vb_idx(vb->va->va_start));
|
||||||
|
@ -960,9 +949,6 @@ next:
|
||||||
spin_unlock(&vb->lock);
|
spin_unlock(&vb->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (purge)
|
|
||||||
purge_fragmented_blocks_thiscpu();
|
|
||||||
|
|
||||||
put_cpu_var(vmap_block_queue);
|
put_cpu_var(vmap_block_queue);
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue