• L
    md: Notify sysfs sync_completed in md_reap_sync_thread() · 9973f0fa
    Logan Gunthorpe 提交于
    The mdadm test 07layouts randomly produces a kernel hung task deadlock.
    The deadlock is caused by the suspend_lo/suspend_hi files being set by
    the mdadm background process during reshape and not being cleared
    because the process hangs. (Leaving aside the issue of the fragility of
    freezing kernel tasks by buggy userspace processes...)
    
    When the background mdadm process hangs it, is waiting (without a
    timeout) on a change to the sync_completed file signalling that the
    reshape has completed. The process is woken up a couple times when
    the reshape finishes but it is woken up before MD_RECOVERY_RUNNING
    is cleared so sync_completed_show() reports 0 instead of "none".
    
    To fix this, notify the sysfs file in md_reap_sync_thread() after
    MD_RECOVERY_RUNNING has been cleared. This wakes up mdadm and causes
    it to continue and write to suspend_lo/suspend_hi to allow IO to
    continue.
    Signed-off-by: NLogan Gunthorpe <logang@deltatee.com>
    Reviewed-by: NChristoph Hellwig <hch@lst.de>
    Signed-off-by: NSong Liu <song@kernel.org>
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    9973f0fa
md.c 259.0 KB