• Petr Mladek's avatar
    mm/khugepaged: allow interruption of allocation sleep again · bde43c6c
    Petr Mladek authored
    Commit 1dfb059b ("thp: reduce khugepaged freezing latency") fixed
    khugepaged to do not block a system suspend.  But the result is that it
    could not get interrupted before the given timeout because the condition
    for the wait event is "false".
    
    This patch puts back the original approach but it uses
    freezable_schedule_timeout_interruptible() instead of
    schedule_timeout_interruptible().  It does the right thing.  I am pretty
    sure that the freezable variant was not used in the original fix only
    because it was not available at that time.
    
    The regression has been there for ages.  It was not critical.  It just
    did the allocation throttling a little bit more aggressively.
    
    I found this problem when converting the kthread to kthread worker API
    and trying to understand the code.
    
    This bug is thought to have minimal userspace-visible impact.  Somebody
    could set a high alloc_sleep value by mistake, and then try to fix it
    back, but khugepaged would keep sleeping until the high value expires.
    Signed-off-by: default avatarPetr Mladek <pmladek@suse.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
    Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Ebru Akagunduz <ebru.akagunduz@gmail.com>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    bde43c6c
huge_memory.c 81.1 KB