A sorry. I need more coffee, this is not the cover letter, but the patch that introduceѕ find_unlink_vmap_area. > - 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. > + va = find_unlink_vmap_area((unsigned long) addr); > + return __remove_vm_area(va); This can drop the va local variable now.