Messages in this thread | | | Subject | Re: [PATCH v3] mm/hugetlb: fix memory offline with hugepage size > memory block size | From | Dave Hansen <> | Date | Thu, 22 Sep 2016 11:12:06 -0700 |
| |
On 09/22/2016 09:29 AM, Gerald Schaefer wrote: > static void dissolve_free_huge_page(struct page *page) > { > + struct page *head = compound_head(page); > + struct hstate *h = page_hstate(head); > + int nid = page_to_nid(head); > + > spin_lock(&hugetlb_lock); > - if (PageHuge(page) && !page_count(page)) { > - struct hstate *h = page_hstate(page); > - int nid = page_to_nid(page); > - list_del(&page->lru); > - h->free_huge_pages--; > - h->free_huge_pages_node[nid]--; > - h->max_huge_pages--; > - update_and_free_page(h, page); > - } > + list_del(&head->lru); > + h->free_huge_pages--; > + h->free_huge_pages_node[nid]--; > + h->max_huge_pages--; > + update_and_free_page(h, head); > spin_unlock(&hugetlb_lock); > }
Do you need to revalidate anything once you acquire the lock? Can this, for instance, race with another thread doing vm.nr_hugepages=0? Or a thread faulting in and allocating the large page that's being dissolved?
| |