diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 285f0e7d28e7..814ce9122709 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -2578,16 +2578,13 @@ static int s_show(struct seq_file *m, void *p) struct vmap_area *va = p; struct vm_struct *v; - if (va->flags & (VM_LAZY_FREE | VM_LAZY_FREEING)) + /* + * s_show can encounter race with remove_vm_area, !VM_VM_AREA on + * behalf of vmap area is being tear down or vm_map_ram allocation. + */ + if (!(va->flags & VM_VM_AREA)) return 0; - if (!(va->flags & VM_VM_AREA)) { - seq_printf(m, "0x%pK-0x%pK %7ld vm_map_ram\n", - (void *)va->va_start, (void *)va->va_end, - va->va_end - va->va_start); - return 0; - } - v = va->vm; /* Pair with smp_wmb() in clear_vm_uninitialized_flag() */