• 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
Name
Last commit
Last update
..
Kconfig Loading commit data...
Makefile Loading commit data...
bootmem.c Loading commit data...
fadvise.c Loading commit data...
filemap.c Loading commit data...
filemap.h Loading commit data...
filemap_xip.c Loading commit data...
fremap.c Loading commit data...
highmem.c Loading commit data...
hugetlb.c Loading commit data...
internal.h Loading commit data...
madvise.c Loading commit data...
memory.c Loading commit data...
memory_hotplug.c Loading commit data...
mempolicy.c Loading commit data...
mempool.c Loading commit data...
mincore.c Loading commit data...
mlock.c Loading commit data...
mmap.c Loading commit data...
mprotect.c Loading commit data...
mremap.c Loading commit data...
msync.c Loading commit data...
nommu.c Loading commit data...
oom_kill.c Loading commit data...
page-writeback.c Loading commit data...
page_alloc.c Loading commit data...
page_io.c Loading commit data...
pdflush.c Loading commit data...
prio_tree.c Loading commit data...
readahead.c Loading commit data...
rmap.c Loading commit data...
shmem.c Loading commit data...
slab.c Loading commit data...
slob.c Loading commit data...
sparse.c Loading commit data...
swap.c Loading commit data...
swap_state.c Loading commit data...
swapfile.c Loading commit data...
thrash.c Loading commit data...
tiny-shmem.c Loading commit data...
truncate.c Loading commit data...
util.c Loading commit data...
vmalloc.c Loading commit data...
vmscan.c Loading commit data...