• H
    [PATCH] compound page: default destructor · d98c7a09
    Hugh Dickins 提交于
    Somehow I imagined that calling a NULL destructor would free a compound page
    rather than oopsing.  No, we must supply a default destructor, __free_pages_ok
    using the order noted by prep_compound_page.  hugetlb can still replace this
    as before with its own free_huge_page pointer.
    
    The case that needs this is not common: rarely does put_compound_page's
    put_page_testzero bring the count down to 0.  But if get_user_pages is applied
    to some part of a compound page, without immediate release (e.g.  AIO or
    Infiniband), then it's possible for its put_page to come after the containing
    vma has been unmapped and the driver done its free_pages.
    
    That's just the kind of case compound pages are supposed to be guarding
    against (but Nick points out, nor did PageReserved handle this right).
    Signed-off-by: NHugh Dickins <hugh@veritas.com>
    Signed-off-by: NAndrew Morton <akpm@osdl.org>
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    d98c7a09
page_alloc.c 66.9 KB