Merge tag 'v3.10.69' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / mm / vmalloc.c
index d4565606cc96867a908b0881544e253f0c910bbf..0a77f6632f482df1be3609558d94bf334863388b 100644 (file)
@@ -423,11 +423,18 @@ nocache:
                if (addr + size < addr)
                        goto overflow;
 
+               /*
                if (list_is_last(&first->list, &vmap_area_list))
                        goto found;
 
                first = list_entry(first->list.next,
                                struct vmap_area, list);
+               */
+               n = rb_next(&first->rb_node);
+               if (n)
+                       first = rb_entry(n, struct vmap_area, rb_node);
+               else
+                       goto found;
        }
 
 found:
@@ -931,8 +938,13 @@ again:
                int i;
 
                spin_lock(&vb->lock);
-               if (vb->free < 1UL << order)
+               if (vb->free < 1UL << order) {
+            if (vb->free + vb->dirty == VMAP_BBMAP_BITS && vb->dirty != VMAP_BBMAP_BITS) {
+                               /* free left too small, handle as fragmented scenario */
+                               purge = 1;
+                       }
                        goto next;
+        }
 
                i = bitmap_find_free_region(vb->alloc_map,
                                                VMAP_BBMAP_BITS, order);