diff options
Diffstat (limited to 'mm/vmalloc.c')
| -rw-r--r-- | mm/vmalloc.c | 19 |
1 files changed, 3 insertions, 16 deletions
diff --git a/mm/vmalloc.c b/mm/vmalloc.c index af58324c361a..fab19876b4d1 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c | |||
| @@ -671,10 +671,7 @@ struct vmap_block { | |||
| 671 | DECLARE_BITMAP(alloc_map, VMAP_BBMAP_BITS); | 671 | DECLARE_BITMAP(alloc_map, VMAP_BBMAP_BITS); |
| 672 | DECLARE_BITMAP(dirty_map, VMAP_BBMAP_BITS); | 672 | DECLARE_BITMAP(dirty_map, VMAP_BBMAP_BITS); |
| 673 | union { | 673 | union { |
| 674 | struct { | 674 | struct list_head free_list; |
| 675 | struct list_head free_list; | ||
| 676 | struct list_head dirty_list; | ||
| 677 | }; | ||
| 678 | struct rcu_head rcu_head; | 675 | struct rcu_head rcu_head; |
| 679 | }; | 676 | }; |
| 680 | }; | 677 | }; |
| @@ -741,7 +738,6 @@ static struct vmap_block *new_vmap_block(gfp_t gfp_mask) | |||
| 741 | bitmap_zero(vb->alloc_map, VMAP_BBMAP_BITS); | 738 | bitmap_zero(vb->alloc_map, VMAP_BBMAP_BITS); |
| 742 | bitmap_zero(vb->dirty_map, VMAP_BBMAP_BITS); | 739 | bitmap_zero(vb->dirty_map, VMAP_BBMAP_BITS); |
| 743 | INIT_LIST_HEAD(&vb->free_list); | 740 | INIT_LIST_HEAD(&vb->free_list); |
| 744 | INIT_LIST_HEAD(&vb->dirty_list); | ||
| 745 | 741 | ||
| 746 | vb_idx = addr_to_vb_idx(va->va_start); | 742 | vb_idx = addr_to_vb_idx(va->va_start); |
| 747 | spin_lock(&vmap_block_tree_lock); | 743 | spin_lock(&vmap_block_tree_lock); |
| @@ -772,12 +768,7 @@ static void free_vmap_block(struct vmap_block *vb) | |||
| 772 | struct vmap_block *tmp; | 768 | struct vmap_block *tmp; |
| 773 | unsigned long vb_idx; | 769 | unsigned long vb_idx; |
| 774 | 770 | ||
| 775 | spin_lock(&vb->vbq->lock); | 771 | BUG_ON(!list_empty(&vb->free_list)); |
| 776 | if (!list_empty(&vb->free_list)) | ||
| 777 | list_del(&vb->free_list); | ||
| 778 | if (!list_empty(&vb->dirty_list)) | ||
| 779 | list_del(&vb->dirty_list); | ||
| 780 | spin_unlock(&vb->vbq->lock); | ||
| 781 | 772 | ||
| 782 | vb_idx = addr_to_vb_idx(vb->va->va_start); | 773 | vb_idx = addr_to_vb_idx(vb->va->va_start); |
| 783 | spin_lock(&vmap_block_tree_lock); | 774 | spin_lock(&vmap_block_tree_lock); |
| @@ -862,11 +853,7 @@ static void vb_free(const void *addr, unsigned long size) | |||
| 862 | 853 | ||
| 863 | spin_lock(&vb->lock); | 854 | spin_lock(&vb->lock); |
| 864 | bitmap_allocate_region(vb->dirty_map, offset >> PAGE_SHIFT, order); | 855 | bitmap_allocate_region(vb->dirty_map, offset >> PAGE_SHIFT, order); |
| 865 | if (!vb->dirty) { | 856 | |
| 866 | spin_lock(&vb->vbq->lock); | ||
| 867 | list_add(&vb->dirty_list, &vb->vbq->dirty); | ||
| 868 | spin_unlock(&vb->vbq->lock); | ||
| 869 | } | ||
| 870 | vb->dirty += 1UL << order; | 857 | vb->dirty += 1UL << order; |
| 871 | if (vb->dirty == VMAP_BBMAP_BITS) { | 858 | if (vb->dirty == VMAP_BBMAP_BITS) { |
| 872 | BUG_ON(vb->free || !list_empty(&vb->free_list)); | 859 | BUG_ON(vb->free || !list_empty(&vb->free_list)); |
