mm/vmalloc.c: Remove always-true conditional in vmap_init_free_space
Subsystems (2)
PATCH 1/1 mm/vmalloc.c: Remove always-true conditional in vmap_init_free_space
When unsigned long variables are subtracted from one another, the result is always non-negative.
The vmap_area_list is sorted by address.
So the following two conditions are always true.
1) if (busy->va_start - vmap_start > 0)
2) if (vmap_end - vmap_start > 0)
Just remove them.
--- mm/vmalloc.c | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-)
mm/vmalloc.c +13 -19
@@ -1810,31 +1810,25 @@ static void vmap_init_free_space(void)* |<--------------------------------->| */ list_for_each_entry (busy, &vmap_area_list, list) { -if (busy->va_start - vmap_start >0 ) { - free =kmem_cache_zalloc (vmap_area_cachep,GFP_NOWAIT ); -if (!WARN_ON_ONCE (!free)) { - free->va_start = vmap_start; - free->va_end = busy->va_start; - -insert_vmap_area_augment (free,NULL , - &free_vmap_area_root, - &free_vmap_area_list); - } - } - - vmap_start = busy->va_end; - } - -if (vmap_end - vmap_start >0 ) { free =kmem_cache_zalloc (vmap_area_cachep,GFP_NOWAIT );if (!WARN_ON_ONCE (!free)) { free->va_start = vmap_start; - free->va_end = vmap_end; + free->va_end = busy->va_start;insert_vmap_area_augment (free,NULL , - &free_vmap_area_root, - &free_vmap_area_list); + &free_vmap_area_root, &free_vmap_area_list); } + + vmap_start = busy->va_end; + } + + free =kmem_cache_zalloc (vmap_area_cachep,GFP_NOWAIT ); +if (!WARN_ON_ONCE (!free)) { + free->va_start = vmap_start; + free->va_end = vmap_end; + +insert_vmap_area_augment (free,NULL , + &free_vmap_area_root, &free_vmap_area_list); } }
Signature · 1 line
2.21.0
Quoted 11 lines · Pengfei Li
When unsigned long variables are subtracted from one another, the result is always non-negative.
The
vmap_area_listis sorted by address.So the following two conditions are always true.
1) if (
busy->va_start-vmap_start> 0)
2) if (vmap_end-vmap_start> 0)Just remove them.
That condition won't be true if busy->va_start == vmap_start.
Quoted 7 lines · Matthew Wilcox
Quoted 5 lines · Pengfei Li
When unsigned long variables are subtracted from one another, the result is always non-negative.
The
vmap_area_listis sorted by address.
Quoted 8 lines
Quoted 6 lines
So the following two conditions are always true.
1) if (
busy->va_start-vmap_start> 0)
2) if (vmap_end-vmap_start> 0)Just remove them.
That condition won't be true if
busy->va_start==vmap_start.
Yes, you're right.
Sorry for my bad job.