Typical. I spotted this after I pushed send..... > <SNIP> > @@ -266,14 +326,19 @@ static void decrement_hugepage_resv_vma(struct hstate *h, > * private mappings. > */ > if (is_vma_resv_set(vma, HPAGE_RESV_OWNER)) { > - unsigned long flags, reserve; > + unsigned long idx = vma_pagecache_offset(h, > + vma, address); > + struct resv_map *reservations = vma_resv_map(vma); > + > h->resv_huge_pages--; > - flags = (unsigned long)vma->vm_private_data & > - HPAGE_RESV_MASK; > - reserve = (unsigned long)vma->vm_private_data - 1; > - vma->vm_private_data = (void *)(reserve | flags); > + > + /* Mark this page used in the map. */ > + if (region_chg(&reservations->regions, idx, idx + 1) < 0) > + return -1; > + region_add(&reservations->regions, idx, idx + 1); > } decrement_hugepage_resv_vma() is called with hugetlb_lock held and region_chg calls kmalloc(GFP_KERNEL). Hence it's possible we would sleep with that spinlock held which is a bit uncool. The allocation needs to happen outside the lock. Right? > <SNIP> -- Mel Gorman -- To unsubscribe from this list: send the line "unsubscribe kernel-testers" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html