|
@@ -1016,15 +1016,16 @@ void vm_unmap_aliases(void)
|
|
|
|
|
|
rcu_read_lock();
|
|
|
list_for_each_entry_rcu(vb, &vbq->free, free_list) {
|
|
|
- int i;
|
|
|
+ int i, j;
|
|
|
|
|
|
spin_lock(&vb->lock);
|
|
|
i = find_first_bit(vb->dirty_map, VMAP_BBMAP_BITS);
|
|
|
- while (i < VMAP_BBMAP_BITS) {
|
|
|
+ if (i < VMAP_BBMAP_BITS) {
|
|
|
unsigned long s, e;
|
|
|
- int j;
|
|
|
- j = find_next_zero_bit(vb->dirty_map,
|
|
|
- VMAP_BBMAP_BITS, i);
|
|
|
+
|
|
|
+ j = find_last_bit(vb->dirty_map,
|
|
|
+ VMAP_BBMAP_BITS);
|
|
|
+ j = j + 1; /* need exclusive index */
|
|
|
|
|
|
s = vb->va->va_start + (i << PAGE_SHIFT);
|
|
|
e = vb->va->va_start + (j << PAGE_SHIFT);
|
|
@@ -1034,10 +1035,6 @@ void vm_unmap_aliases(void)
|
|
|
start = s;
|
|
|
if (e > end)
|
|
|
end = e;
|
|
|
-
|
|
|
- i = j;
|
|
|
- i = find_next_bit(vb->dirty_map,
|
|
|
- VMAP_BBMAP_BITS, i);
|
|
|
}
|
|
|
spin_unlock(&vb->lock);
|
|
|
}
|