• Guoqing Jiang's avatar
    dlm: recheck kthread_should_stop() before schedule() · 9e1b0211
    Guoqing Jiang authored
    Call schedule() here could make the thread miss wake
    up from kthread_stop(), so it is better to recheck
    kthread_should_stop() before call schedule(), a symptom
    happened when I run indefinite test (which mostly created
    clustered raid1, assemble it in other nodes, then stop
    them) of clustered raid.
    
    $ ps aux|grep md|grep D
    root      4211  0.0  0.0  19760  2220 ?        Ds   02:58   0:00 mdadm -Ssq
    $ cat /proc/4211/stack
    kthread_stop+0x4d/0x150
    dlm_recoverd_stop+0x15/0x20 [dlm]
    dlm_release_lockspace+0x2ab/0x460 [dlm]
    leave+0xbf/0x150 [md_cluster]
    md_cluster_stop+0x18/0x30 [md_mod]
    bitmap_free+0x12e/0x140 [md_mod]
    bitmap_destroy+0x7f/0x90 [md_mod]
    __md_stop+0x21/0xa0 [md_mod]
    do_md_stop+0x15f/0x5c0 [md_mod]
    md_ioctl+0xa65/0x18a0 [md_mod]
    blkdev_ioctl+0x49e/0x8d0
    block_ioctl+0x41/0x50
    do_vfs_ioctl+0x96/0x5b0
    SyS_ioctl+0x79/0x90
    entry_SYSCALL_64_fastpath+0x1e/0xad
    
    This maybe not resolve the issue completely since the
    KTHREAD_SHOULD_STOP flag could be set between "break"
    and "schedule", but at least the chance for the symptom
    happen could be reduce a lot (The indefinite test runs
    more than 20 hours without problem and it happens easily
    without the change).
    Signed-off-by: 's avatarGuoqing Jiang <gqjiang@suse.com>
    Signed-off-by: 's avatarDavid Teigland <teigland@redhat.com>
    9e1b0211