On Tue 13-04-21 12:47:43, Oscar Salvador wrote: > Currently, the clearing of the flag is done under the lock, but this > is unnecessary as we just allocated the page and we did not give it > away yet, so no one should be messing with it. > > Also, this helps making clear that here the lock is only protecting the > counter. While moving the flag clearing is ok I am wondering why do we need that in the first place. I think it is just a leftover from 6c0371490140 ("hugetlb: convert PageHugeFreed to HPageFreed flag"). Prior to that a tail page as been used to keep track of the state but now all happens in the head page and the flag uses page->private which is always initialized when allocated by the allocator (post_alloc_hook). Or do we need it for giga pages which are not allocated by the page allocator? If yes then moving it to prep_compound_gigantic_page would be better. So should we just drop it here? > Signed-off-by: Oscar Salvador <osalvador@xxxxxxx> > --- > mm/hugetlb.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/hugetlb.c b/mm/hugetlb.c > index 54d81d5947ed..e40d5fe5c63c 100644 > --- a/mm/hugetlb.c > +++ b/mm/hugetlb.c > @@ -1490,10 +1490,10 @@ static void prep_new_huge_page(struct hstate *h, struct page *page, int nid) > hugetlb_set_page_subpool(page, NULL); > set_hugetlb_cgroup(page, NULL); > set_hugetlb_cgroup_rsvd(page, NULL); > + ClearHPageFreed(page); > spin_lock_irq(&hugetlb_lock); > h->nr_huge_pages++; > h->nr_huge_pages_node[nid]++; > - ClearHPageFreed(page); > spin_unlock_irq(&hugetlb_lock); > } > > -- > 2.16.3 -- Michal Hocko SUSE Labs