Skip to content

Commit

Permalink
mm/vmalloc.c: remove dead code in vb_alloc
Browse files Browse the repository at this point in the history
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 <[email protected]>
    Johannes Weiner <[email protected]>

  but git doesn't do "multiple authors" ]

Signed-off-by: Zhang Yanfei <[email protected]>
Cc: Johannes Weiner <[email protected]>
Cc: Mel Gorman <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Zhang Yanfei authored and torvalds committed Jul 9, 2013
1 parent ab15d9b commit 3fcd76e
Showing 1 changed file with 1 addition and 15 deletions.
16 changes: 1 addition & 15 deletions mm/vmalloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -934,17 +933,7 @@ static void *vb_alloc(unsigned long size, gfp_t gfp_mask)
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));
Expand All @@ -960,9 +949,6 @@ static void *vb_alloc(unsigned long size, gfp_t gfp_mask)
spin_unlock(&vb->lock);
}

if (purge)
purge_fragmented_blocks_thiscpu();

put_cpu_var(vmap_block_queue);
rcu_read_unlock();

Expand Down

0 comments on commit 3fcd76e

Please sign in to comment.