lkml.org 
[lkml]   [2010]   [Aug]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 6/8] HWPOISON, hugetlb: soft offlining for hugepage
    > +static int is_hugepage_on_freelist(struct page *hpage)
    > +{
    > + struct page *page;
    > + struct page *tmp;
    > + struct hstate *h = page_hstate(hpage);
    > + int nid = page_to_nid(hpage);
    > +
    > + spin_lock(&hugetlb_lock);
    > + list_for_each_entry_safe(page, tmp, &h->hugepage_freelists[nid], lru) {
    > + if (page == hpage) {
    > + spin_unlock(&hugetlb_lock);
    > + return 1;
    > + }
    > + }
    > + spin_unlock(&hugetlb_lock);
    > + return 0;
    > +}

    Ha! That looks better than the page_count test in my previous email.

    > +void isolate_hwpoisoned_huge_page(struct page *hpage)
    > +{
    > + lock_page(hpage);
    > + if (is_hugepage_on_freelist(hpage))
    > + __isolate_hwpoisoned_huge_page(hpage);
    > + unlock_page(hpage);
    > +}

    However it should still be racy if the test/isolate actions are
    not performed in the same hugetlb_lock.

    Thanks,
    Fengguang


    \
     
     \ /
      Last update: 2010-08-25 05:05    [W:0.040 / U:1.360 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site