• Mike Kravetz's avatar
    mm/hugetlb: add cache of descriptors to resv_map for region_add · 5e911373
    Mike Kravetz authored
    hugetlbfs is used today by applications that want a high degree of
    control over huge page usage.  Often, large hugetlbfs files are used to
    map a large number huge pages into the application processes.  The
    applications know when page ranges within these large files will no
    longer be used, and ideally would like to release them back to the
    subpool or global pools for other uses.  The fallocate() system call
    provides an interface for preallocation and hole punching within files.
    This patch set adds fallocate functionality to hugetlbfs.
    fallocate hole punch will want to remove a specific range of pages.
    When pages are removed, their associated entries in the region/reserve
    map will also be removed.  This will break an assumption in the
    region_chg/region_add calling sequence.  If a new region descriptor must
    be allocated, it is done as part of the region_chg processing.  In this
    way, region_add can not fail because it does not need to attempt an
    To prepare for fallocate hole punch, create a "cache" of descriptors
    that can be used by region_add if necessary.  region_chg will ensure
    there are sufficient entries in the cache.  It will be necessary to
    track the number of in progress add operations to know a sufficient
    number of descriptors reside in the cache.  A new routine region_abort
    is added to adjust this in progress count when add operations are
    aborted.  vma_abort_reservation is also added for callers creating
    reservations with vma_needs_reservation/vma_commit_reservation.
    [akpm@linux-foundation.org: fix typo in comment, use more cols]
    Signed-off-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
    Reviewed-by: default avatarNaoya Horiguchi <n-horiguchi@ah.jp.nec.com>
    Acked-by: default avatarHillf Danton <hillf.zj@alibaba-inc.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: Aneesh Kumar <aneesh.kumar@linux.vnet.ibm.com>
    Cc: Christoph Hellwig <hch@infradead.org>
    Cc: Michal Hocko <mhocko@suse.cz>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>