On Wed, May 24 2023 at 18:34, Baoquan He wrote: > On 05/23/23 at 04:02pm, Thomas Gleixner wrote: Can you please trim your replies? It's a pain to find them. >> static void *vb_alloc(unsigned long size, gfp_t gfp_mask) >> @@ -4173,7 +4183,7 @@ struct vm_struct **pcpu_get_vm_areas(con >> overflow: >> spin_unlock(&free_vmap_area_lock); >> if (!purged) { >> - purge_vmap_area_lazy(); >> + purge_vmap_area_lazy(true); >> purged = true; >> >> /* Before "retry", check if we recover. */ > > Wondering why bothering to add 'force_purge' to purge_vmap_area_lazy(), > purge_fragmented_blocks_allcpus() if they are all true. Can't we set > 'force_purge' as true for purge_fragmented_block() in > purge_fragmented_blocks()? > > alloc_vmap_area() > pcpu_get_vm_areas() > -->purge_vmap_area_lazy(true) > -->purge_fragmented_blocks_allcpus(force_purge=true) > -->purge_fragmented_block(force_purge=true) Yes. purge_fragmented_blocks_allcpus() has only the purge_vmap_area_lazy() caller left. > And one place of change is missing, it will fail building. Already reported by Uladzislau and I sent a fix in reply.