lkml.org 
[lkml]   [2021]   [May]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 167/289] mm/hugeltb: handle the error case in hugetlb_fix_reserve_counts()
    Date
    From: Miaohe Lin <linmiaohe@huawei.com>

    [ Upstream commit da56388c4397878a65b74f7fe97760f5aa7d316b ]

    A rare out of memory error would prevent removal of the reserve map region
    for a page. hugetlb_fix_reserve_counts() handles this rare case to avoid
    dangling with incorrect counts. Unfortunately, hugepage_subpool_get_pages
    and hugetlb_acct_memory could possibly fail too. We should correctly
    handle these cases.

    Link: https://lkml.kernel.org/r/20210410072348.20437-5-linmiaohe@huawei.com
    Fixes: b5cec28d36f5 ("hugetlbfs: truncate_hugepages() takes a range of pages")
    Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
    Cc: Feilong Lin <linfeilong@huawei.com>
    Cc: Mike Kravetz <mike.kravetz@oracle.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    mm/hugetlb.c | 11 +++++++++--
    1 file changed, 9 insertions(+), 2 deletions(-)

    diff --git a/mm/hugetlb.c b/mm/hugetlb.c
    index 573f1a0183be..900851a4f914 100644
    --- a/mm/hugetlb.c
    +++ b/mm/hugetlb.c
    @@ -745,13 +745,20 @@ void hugetlb_fix_reserve_counts(struct inode *inode)
    {
    struct hugepage_subpool *spool = subpool_inode(inode);
    long rsv_adjust;
    + bool reserved = false;

    rsv_adjust = hugepage_subpool_get_pages(spool, 1);
    - if (rsv_adjust) {
    + if (rsv_adjust > 0) {
    struct hstate *h = hstate_inode(inode);

    - hugetlb_acct_memory(h, 1);
    + if (!hugetlb_acct_memory(h, 1))
    + reserved = true;
    + } else if (!rsv_adjust) {
    + reserved = true;
    }
    +
    + if (!reserved)
    + pr_warn("hugetlb: Huge Page Reserved count may go negative.\n");
    }

    /*
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-05-17 17:50    [W:4.061 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site