Skip to content
  • Ming Lei's avatar
    block: deactivate blk_stat timer in wbt_disable_default() · 69e9b285
    Ming Lei authored
    commit 544fbd16 upstream.
    
    rwb_enabled() can't be changed when there is any inflight IO.
    
    wbt_disable_default() may set rwb->wb_normal as zero, however the
    blk_stat timer may still be pending, and the timer function will update
    wrb->wb_normal again.
    
    This patch introduces blk_stat_deactivate() and applies it in
    wbt_disable_default(), then the following IO hang triggered when running
    parted & switching io scheduler can be fixed:
    
    [  369.937806] INFO: task parted:3645 blocked for more than 120 seconds.
    [  369.938941]       Not tainted 4.20.0-rc6-00284-g906c801e5248 #498
    [  369.939797] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    [  369.940768] parted          D    0  3645   3239 0x00000000
    [  369.941500] Call Trace:
    [  369.941874]  ? __schedule+0x6d9/0x74c
    [  369.942392]  ? wbt_done+0x5e/0x5e
    [  369.942864]  ? wbt_cleanup_cb+0x16/0x16
    [  369.943404]  ? wbt_done+0x5e/0x5e
    [  369.943874]  sch...
    69e9b285