Since function merge_or_add_vmap_area() is only used to merge or add vmap area to the *FREE* tree, so rename it to merge_or_add_va_to_free_tree. Then this is obvious, merge_or_add_vmap_area() does not need parameters root and head, so remove them. Signed-off-by: Pengfei Li <lpf.vector@xxxxxxxxx> --- mm/vmalloc.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index b6ea52d6e8f9..ad117d16af34 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -688,8 +688,7 @@ insert_va_to_free_tree(struct vmap_area *va, struct rb_node *from) * freed. */ static __always_inline void -merge_or_add_vmap_area(struct vmap_area *va, - struct rb_root *root, struct list_head *head) +merge_or_add_va_to_free_tree(struct vmap_area *va) { struct vmap_area *sibling; struct list_head *next; @@ -701,7 +700,7 @@ merge_or_add_vmap_area(struct vmap_area *va, * Find a place in the tree where VA potentially will be * inserted, unless it is merged with its sibling/siblings. */ - link = find_va_links(va, root, NULL, &parent); + link = find_va_links(va, &free_vmap_area_root, NULL, &parent); /* * Get next node of VA to check if merging can be done. @@ -717,7 +716,7 @@ merge_or_add_vmap_area(struct vmap_area *va, * | | * start end */ - if (next != head) { + if (next != &free_vmap_area_list) { sibling = list_entry(next, struct vmap_area, list); if (sibling->va_start == va->va_end) { sibling->va_start = va->va_start; @@ -725,9 +724,6 @@ merge_or_add_vmap_area(struct vmap_area *va, /* Check and update the tree if needed. */ augment_tree_propagate_from(sibling); - /* Remove this VA, it has been merged. */ - unlink_va(va, root); - /* Free vmap_area object. */ kmem_cache_free(vmap_area_cachep, va); @@ -744,7 +740,7 @@ merge_or_add_vmap_area(struct vmap_area *va, * | | * start end */ - if (next->prev != head) { + if (next->prev != &free_vmap_area_list) { sibling = list_entry(next->prev, struct vmap_area, list); if (sibling->va_end == va->va_start) { sibling->va_end = va->va_end; @@ -753,7 +749,8 @@ merge_or_add_vmap_area(struct vmap_area *va, augment_tree_propagate_from(sibling); /* Remove this VA, it has been merged. */ - unlink_va(va, root); + if (merged) + unlink_va(va, &free_vmap_area_root); /* Free vmap_area object. */ kmem_cache_free(vmap_area_cachep, va); @@ -764,7 +761,8 @@ merge_or_add_vmap_area(struct vmap_area *va, insert: if (!merged) { - link_va(va, root, parent, link, head); + link_va(va, &free_vmap_area_root, parent, link, + &free_vmap_area_list); augment_tree_propagate_from(va); } } @@ -1141,8 +1139,7 @@ static void __free_vmap_area(struct vmap_area *va) /* * Merge VA with its neighbors, otherwise just add it. */ - merge_or_add_vmap_area(va, - &free_vmap_area_root, &free_vmap_area_list); + merge_or_add_va_to_free_tree(va); } /* -- 2.21.0