The aim of this patch is to split "unpurged" objects and allocated ones, that gives us some boost in performance, because of less number of objects in the "busy" tree, i.e. insert/lookup/remove operations become faster, what is obvious. The splitting is possible because "purge list", "busy tree" and "free tree" are three separate entities. Number of "unpurged" objects depends on num_online_cpus() and how many pages each objects holds. For example on my 4xCPUs system the value of lazy_max_pages() is 24576, i.e. in case of one object per one page we get 24576 "unpurged" nodes in the rb-tree. v1 -> v2: a) directly use merge_or_add_vmap_area() function in __purge_vmap_area_lazy(), because VA is detached, i.e. there is no need to "unlink" it; b) because of (a), we can avoid of modifying unlink_va() and keep WARN_ON(RB_EMPTY_NODE(&va->rb_node) in place as it used to be. Appreciate for any comments and review. Uladzislau Rezki (Sony) (1): mm/vmalloc: do not keep unpurged areas in the busy tree mm/vmalloc.c | 52 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 8 deletions(-) -- 2.11.0