• Mike Kravetz's avatar
    hugetlbfs: zero partial pages during fallocate hole punch · 68d32527
    Mike Kravetz authored
    hugetlbfs fallocate support was originally added with commit 70c3547e
    ("hugetlbfs: add hugetlbfs_fallocate()").  Initial support only operated
    on whole hugetlb pages.  This makes sense for populating files as other
    interfaces such as mmap and truncate require hugetlb page size alignment. 
    Only operating on whole hugetlb pages for the hole punch case was a
    simplification and there was no compelling use case to zero partial pages.
    
    In a recent discussion[1] it was assumed that hugetlbfs hole punch would
    zero partial hugetlb pages as that is in line with the man page
    description saying 'partial filesystem blocks are zeroed'.  However, the
    hugetlbfs hole punch code actually does this:
    
            hole_start = round_up(offset, hpage_size);
            hole_end = round_down(offset + len, hpage_size);
    
    Modify code to zero partial hugetlb pages in hole punch range.  It is
    possible that application code could note a change in behavior.  However,
    that would imply the code is passing in an unaligned range and expecting
    only whole pages be removed.  This is unlikely as the fallocate
    documentation states the opposite.
    
    The current hugetlbfs fallocate hole punch behavior is tested with the
    libhugetlbfs test fallocate_align[2].  This test will be updated to
    validate partial page zeroing.
    
    [1] https://lore.kernel.org/linux-mm/20571829-9d3d-0b48-817c-b6b15565f651@redhat.com/
    [2] https://github.com/libhugetlbfs/libhugetlbfs/blob/master/tests/fallocate_align.c
    
    Link: https://lkml.kernel.org/r/YqeiMlZDKI1Kabfe@monkeySigned-off-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
    Reviewed-by: default avatarMuchun Song <songmuchun@bytedance.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Naoya Horiguchi <naoya.horiguchi@linux.dev>
    Cc: Axel Rasmussen <axelrasmussen@google.com>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    68d32527
inode.c 42.3 KB