• NeilBrown's avatar
    md: avoid races when stopping resync. · 73d5c38a
    NeilBrown authored
    There has been a race in raid10 and raid1 for a long time
    which has only recently started showing up due to a scheduler changed.
    
    When a sync_read request finishes, as soon as reschedule_retry
    is called, another thread can mark the resync request as having
    completed, so md_do_sync can finish, ->stop can be called, and
    ->conf can be freed.  So using conf after reschedule_retry is not
    safe.
    
    Similarly, when finishing a sync_write, calling md_done_sync must be
    the last thing we do, as it allows a chain of events which will free
    conf and other data structures.
    
    The first of these requires action in raid10.c
    The second requires action in raid1.c and raid10.c
    
    Cc: stable@kernel.org
    Signed-off-by: default avatarNeilBrown <neilb@suse.de>
    73d5c38a
raid10.c 60.8 KB