File tree Expand file tree Collapse file tree 1 file changed +9
-5
lines changed Expand file tree Collapse file tree 1 file changed +9
-5
lines changed Original file line number Diff line number Diff line change @@ -628,7 +628,7 @@ static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end)
628
628
struct llist_node * valist ;
629
629
struct vmap_area * va ;
630
630
struct vmap_area * n_va ;
631
- int nr = 0 ;
631
+ bool do_free = false ;
632
632
633
633
lockdep_assert_held (& vmap_purge_lock );
634
634
@@ -638,18 +638,22 @@ static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end)
638
638
start = va -> va_start ;
639
639
if (va -> va_end > end )
640
640
end = va -> va_end ;
641
- nr += ( va -> va_end - va -> va_start ) >> PAGE_SHIFT ;
641
+ do_free = true ;
642
642
}
643
643
644
- if (!nr )
644
+ if (!do_free )
645
645
return false;
646
646
647
- atomic_sub (nr , & vmap_lazy_nr );
648
647
flush_tlb_kernel_range (start , end );
649
648
650
649
spin_lock (& vmap_area_lock );
651
- llist_for_each_entry_safe (va , n_va , valist , purge_list )
650
+ llist_for_each_entry_safe (va , n_va , valist , purge_list ) {
651
+ int nr = (va -> va_end - va -> va_start ) >> PAGE_SHIFT ;
652
+
652
653
__free_vmap_area (va );
654
+ atomic_sub (nr , & vmap_lazy_nr );
655
+ cond_resched_lock (& vmap_area_lock );
656
+ }
653
657
spin_unlock (& vmap_area_lock );
654
658
return true;
655
659
}
You can’t perform that action at this time.
0 commit comments