• Mike Kravetz's avatar
    mm/shmem: add hugetlbfs support to memfd_create() · 749df87b
    Mike Kravetz authored
    This patch came out of discussions in this e-mail thread:
      http://lkml.kernel.org/r/1499357846-7481-1-git-send-email-mike.kravetz%40oracle.com
    
    The Oracle JVM team is developing a new garbage collection model.  This
    new model requires multiple mappings of the same anonymous memory.  One
    straight forward way to accomplish this is with memfd_create.  They can
    use the returned fd to create multiple mappings of the same memory.
    
    The JVM today has an option to use (static hugetlb) huge pages.  If this
    option is specified, they would like to use the same garbage collection
    model requiring multiple mappings to the same memory.  Using hugetlbfs,
    it is possible to explicitly mount a filesystem and specify file paths
    in order to get an fd that can be used for multiple mappings.  However,
    this introduces additional system admin work and coordination.
    
    Ideally they would like to get a hugetlbfs fd without requiring explicit
    mounting of a filesystem.  Today, mmap and shmget can make use of
    hugetlbfs without explicitly mounting a filesystem.  The patch adds this
    functionality to memfd_create.
    
    Add a new flag MFD_HUGETLB to memfd_create() that will specify the file
    to be created resides in the hugetlbfs filesystem.  This is the generic
    hugetlbfs filesystem not associated with any specific mount point.  As
    with other system calls that request hugetlbfs backed pages, there is
    the ability to encode huge page size in the flag arguments.
    
    hugetlbfs does not support sealing operations, therefore specifying
    MFD_ALLOW_SEALING with MFD_HUGETLB will result in EINVAL.
    
    Of course, the memfd_man page would need updating if this type of
    functionality moves forward.
    
    Link: http://lkml.kernel.org/r/1502149672-7759-2-git-send-email-mike.kravetz@oracle.com
    
    
    Signed-off-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    749df87b