lkml.org 
[lkml]   [2022]   [Aug]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH] mm: memory-failure: cleanup try_to_split_thp_page()
    From

    On 2022/8/2 10:12, Kefeng Wang wrote:
    > Since commit 5d1fd5dc877b ("mm,hwpoison: introduce MF_MSG_UNSPLIT_THP"),
    > the action_result() called to show memory error event in memory_failure(),
    action_result(,MF_MSG_UNSPLIT_THP,)
    > so the pr_info() in try_to_split_thp_page() is only needed in
    > soft_offline_in_use_page().
    >
    > Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
    > ---
    > mm/memory-failure.c | 23 ++++++++++++-----------
    > 1 file changed, 12 insertions(+), 11 deletions(-)
    >
    > diff --git a/mm/memory-failure.c b/mm/memory-failure.c
    > index f0e1961d4482..59633a617a0a 100644
    > --- a/mm/memory-failure.c
    > +++ b/mm/memory-failure.c
    > @@ -1524,20 +1524,18 @@ static int identify_page_state(unsigned long pfn, struct page *p,
    > return page_action(ps, p, pfn);
    > }
    >
    > -static int try_to_split_thp_page(struct page *page, const char *msg)
    > +static int try_to_split_thp_page(struct page *page)
    > {
    > + int ret;
    > +
    > lock_page(page);
    > - if (unlikely(split_huge_page(page))) {
    > - unsigned long pfn = page_to_pfn(page);
    > + ret = split_huge_page(page);
    > + unlock_page(page);
    >
    > - unlock_page(page);
    > - pr_info("%s: %#lx: thp split failed\n", msg, pfn);
    > + if (unlikely(ret))
    > put_page(page);
    > - return -EBUSY;
    > - }
    > - unlock_page(page);
    >
    > - return 0;
    > + return ret;
    > }
    >
    > static void unmap_and_kill(struct list_head *to_kill, unsigned long pfn,
    > @@ -2079,7 +2077,7 @@ int memory_failure(unsigned long pfn, int flags)
    > * page is a valid handlable page.
    > */
    > SetPageHasHWPoisoned(hpage);
    > - if (try_to_split_thp_page(p, "Memory Failure") < 0) {
    > + if (try_to_split_thp_page(p) < 0) {
    > action_result(pfn, MF_MSG_UNSPLIT_THP, MF_IGNORED);
    > res = -EBUSY;
    > goto unlock_mutex;
    > @@ -2503,8 +2501,11 @@ static int soft_offline_in_use_page(struct page *page)
    > struct page *hpage = compound_head(page);
    >
    > if (!PageHuge(page) && PageTransHuge(hpage))
    > - if (try_to_split_thp_page(page, "soft offline") < 0)
    > + if (try_to_split_thp_page(page) < 0) {
    > + pr_info("soft offline: %#lx: thp split failed\n",
    > + page_to_pfn(page));
    > return -EBUSY;
    > + }
    > return __soft_offline_page(page);
    > }
    >

    \
     
     \ /
      Last update: 2022-08-02 04:31    [W:5.307 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site