• David Gibson's avatar
    hugepage: fix broken check for offset alignment in hugepage mappings · dec4ad86
    David Gibson authored
    For hugepage mappings, the file offset, like the address and size, needs to
    be aligned to the size of a hugepage.
    
    In commit 68589bc3, the check for this was
    moved into prepare_hugepage_range() along with the address and size checks.
     But since BenH's rework of the get_unmapped_area() paths leading up to
    commit 4b1d8929, prepare_hugepage_range()
    is only called for MAP_FIXED mappings, not for other mappings.  This means
    we're no longer ever checking for an aligned offset - I've confirmed that
    mmap() will (apparently) succeed with a misaligned offset on both powerpc
    and i386 at least.
    
    This patch restores the check, removing it from prepare_hugepage_range()
    and putting it back into hugetlbfs_file_mmap().  I'm putting it there,
    rather than in the get_unmapped_area() path so it only needs to go in one
    place, than separately in the half-dozen or so arch-specific
    implementations of hugetlb_get_unmapped_area().
    Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Cc: Adam Litke <agl@us.ibm.com>
    Cc: Andi Kleen <ak@suse.de>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    dec4ad86
hugetlbpage.c 4.65 KB