• V
    mm: fix kcompactd hang during memory offlining · 172400c6
    Vlastimil Babka 提交于
    Assume memory47 is the last online block left in node1.  This will hang:
    
      # echo offline > /sys/devices/system/node/node1/memory47/state
    
    After a couple of minutes, the following pops up in dmesg:
    
      INFO: task bash:957 blocked for more than 120 seconds.
             Not tainted 4.6.0-rc6+ #6
      "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
      bash            D ffff8800b7adbaf8     0   957    951 0x00000000
      Call Trace:
        schedule+0x35/0x80
        schedule_timeout+0x1ac/0x270
        wait_for_completion+0xe1/0x120
        kthread_stop+0x4f/0x110
        kcompactd_stop+0x26/0x40
        __offline_pages.constprop.28+0x7e6/0x840
        offline_pages+0x11/0x20
        memory_block_action+0x73/0x1d0
        memory_subsys_offline+0x47/0x60
        device_offline+0x86/0xb0
        store_mem_state+0xda/0xf0
        dev_attr_store+0x18/0x30
        sysfs_kf_write+0x37/0x40
        kernfs_fop_write+0x11d/0x170
        __vfs_write+0x37/0x120
        vfs_write+0xa9/0x1a0
        SyS_write+0x55/0xc0
        entry_SYSCALL_64_fastpath+0x1a/0xa4
    
    kcompactd is waiting for kcompactd_max_order > 0 when it's woken up to
    actually exit.  Check kthread_should_stop() to break out of the wait.
    
    Fixes: 698b1b30 ("mm, compaction: introduce kcompactd").
    Reported-by: NReza Arbab <arbab@linux.vnet.ibm.com>
    Tested-by: NReza Arbab <arbab@linux.vnet.ibm.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Hugh Dickins <hughd@google.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    172400c6
compaction.c 52.7 KB