> A sorry. I need more coffee, this is not the cover letter, but the > patch that introduceѕ find_unlink_vmap_area. > Sorry. I should post it with a cover latter to make it less confusing. > > - spin_lock(&vmap_area_lock); > > - unlink_va(va, &vmap_area_root); > > - spin_unlock(&vmap_area_lock); > > + if (!list_empty(&va->list)) { > > + spin_lock(&vmap_area_lock); > > + unlink_va(va, &vmap_area_root); > > + spin_unlock(&vmap_area_lock); > > + } > > As mentioned before, I'd much rather move this into the callers. > Agree. There is only one caller, it is the free_vmap_block(). Will fix in the v3. > > + va = find_unlink_vmap_area((unsigned long) addr); > > + return __remove_vm_area(va); > > This can drop the va local variable now. > Do you mean like: struct vm_struct *remove_vm_area(const void *addr) { might_sleep(); return __remove_vm_area( find_unlink_vmap_area((unsigned long) addr)); } ? Thanks for review! -- Uladzislau Rezki