|
@@ -505,6 +505,7 @@ static void __purge_vmap_area_lazy(unsigned long *start, unsigned long *end,
|
|
static DEFINE_SPINLOCK(purge_lock);
|
|
static DEFINE_SPINLOCK(purge_lock);
|
|
LIST_HEAD(valist);
|
|
LIST_HEAD(valist);
|
|
struct vmap_area *va;
|
|
struct vmap_area *va;
|
|
|
|
+ struct vmap_area *n_va;
|
|
int nr = 0;
|
|
int nr = 0;
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -544,7 +545,7 @@ static void __purge_vmap_area_lazy(unsigned long *start, unsigned long *end,
|
|
|
|
|
|
if (nr) {
|
|
if (nr) {
|
|
spin_lock(&vmap_area_lock);
|
|
spin_lock(&vmap_area_lock);
|
|
- list_for_each_entry(va, &valist, purge_list)
|
|
|
|
|
|
+ list_for_each_entry_safe(va, n_va, &valist, purge_list)
|
|
__free_vmap_area(va);
|
|
__free_vmap_area(va);
|
|
spin_unlock(&vmap_area_lock);
|
|
spin_unlock(&vmap_area_lock);
|
|
}
|
|
}
|