lkml.org 
[lkml]   [2018]   [Mar]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 050/101] mm/thp: do not wait for lock_page() in deferred_split_scan()
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>

    commit fa41b900c30b45fab03783724932dc30cd46a6be upstream.

    deferred_split_scan() gets called from reclaim path. Waiting for page
    lock may lead to deadlock there.

    Replace lock_page() with trylock_page() and skip the page if we failed
    to lock it. We will get to the page on the next scan.

    Link: http://lkml.kernel.org/r/20180315150747.31945-1-kirill.shutemov@linux.intel.com
    Fixes: 9a982250f773 ("thp: introduce deferred_split_huge_page()")
    Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Acked-by: Michal Hocko <mhocko@suse.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    mm/huge_memory.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    --- a/mm/huge_memory.c
    +++ b/mm/huge_memory.c
    @@ -2739,11 +2739,13 @@ static unsigned long deferred_split_scan

    list_for_each_safe(pos, next, &list) {
    page = list_entry((void *)pos, struct page, mapping);
    - lock_page(page);
    + if (!trylock_page(page))
    + goto next;
    /* split_huge_page() removes page from list on success */
    if (!split_huge_page(page))
    split++;
    unlock_page(page);
    +next:
    put_page(page);
    }


    \
     
     \ /
      Last update: 2018-03-27 19:31    [W:4.243 / U:0.848 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site