• NeilBrown's avatar
    md: avoid oops on unload if some process is in poll or select. · e2f23b60
    NeilBrown authored
    If md-mod is unloaded while some process is in poll() or select(),
    then that process maintains a pointer to md_event_waiters, and when
    the try to unlink from that list, they will oops.
    
    The procfs infrastructure ensures that ->poll won't be called after
    remove_proc_entry, but doesn't provide a wait_queue_head for us to
    use, and the waitqueue code doesn't provide a way to remove all
    listeners from a waitqueue.
    
    So we need to:
     1/ make sure no further references to md_event_waiters are taken (by
        setting md_unloading)
     2/ wake up all processes currently waiting, and
     3/ wait until all those processes have disconnected from our
        wait_queue_head.
    Reported-by: default avatar"majianpeng" <majianpeng@gmail.com>
    Signed-off-by: default avatarNeilBrown <neilb@suse.de>
    e2f23b60
md.c 226 KB