• Hugh Dickins's avatar
    [PATCH] compound page: default destructor · d98c7a09
    Hugh Dickins authored
    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: default avatarHugh Dickins <hugh@veritas.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    d98c7a09
page_alloc.c 66.9 KB