• Mike Kravetz's avatar
    hugetlb: use page.private for hugetlb specific page flags · d6995da3
    Mike Kravetz authored
    Patch series "create hugetlb flags to consolidate state", v3.
    
    While discussing a series of hugetlb fixes in [1], it became evident that
    the hugetlb specific page state information is stored in a somewhat
    haphazard manner.  Code dealing with state information would be easier to
    read, understand and maintain if this information was stored in a
    consistent manner.
    
    This series uses page.private of the hugetlb head page for storing a set
    of hugetlb specific page flags.  Routines are priovided for test, set and
    clear of the flags.
    
    [1] https://lore.kernel.org/r/20210106084739.63318-1-songmuchun@bytedance.com
    
    This patch (of 4):
    
    As hugetlbfs evolved, state information about hugetlb pages was added.
    One 'convenient' way of doing this was to use available fields in tail
    pages.  Over time, it has become difficult to know the meaning or contents
    of fields simply by looking at a small bit of code.  Sometimes, the naming
    is just confusing.  For example: The PagePrivate flag indicates a huge
    page reservation was consumed and needs to be restored if an error is
    encountered and the page is freed before it is instantiated.  The
    page.private field contains the pointer to a subpool if the page is
    associated with one.
    
    In an effort to make the code more readable, use page.private to contain
    hugetlb specific page flags.  These flags will have test, set and clear
    functions similar to those used for 'normal' page flags.  More
    importantly, an enum of flag values will be created with names that
    actually reflect their purpose.
    
    In this patch,
    - Create infrastructure for hugetlb specific page flag functions
    - Move subpool pointer to page[1].private to make way for flags
      Create routines with meaningful names to modify subpool field
    - Use new HPageRestoreReserve flag instead of PagePrivate
    
    Conversion of other state information will happen in subsequent patches.
    
    Link: https://lkml.kernel.org/r/20210122195231.324857-1-mike.kravetz@oracle.com
    Link: https://lkml.kernel.org/r/20210122195231.324857-2-mike.kravetz@oracle.comSigned-off-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
    Reviewed-by: default avatarOscar Salvador <osalvador@suse.de>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
    Cc: Muchun Song <songmuchun@bytedance.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Miaohe Lin <linmiaohe@huawei.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    d6995da3
hugetlb.h 25.8 KB