• Alexey Obitotskiy's avatar
    md: Prevent IO hold during accessing to faulty raid5 array · 11367799
    Alexey Obitotskiy authored
    After array enters in faulty state (e.g. number of failed drives
    becomes more then accepted for raid5 level) it sets error flags
    (one of this flags is MD_CHANGE_PENDING). For internal metadata
    arrays MD_CHANGE_PENDING cleared into md_update_sb, but not for
    external metadata arrays. MD_CHANGE_PENDING flag set prevents to
    finish all new or non-finished IOs to array and hold them in
    pending state. In some cases this can leads to deadlock situation.
    
    For example, we have faulty array (2 of 4 drives failed) and
    udev handle array state changes and blkid started (or other
    userspace application that used array to read/write) but unable
    to finish reads due to IO hold. At the same time we unable to get
    exclusive access to array (to stop array in our case) because
    another external application still use this array.
    
    Fix makes possible to return IO with errors immediately.
    So external application can finish working with array and
    give exclusive access to other applications to perform
    required management actions with array.
    Signed-off-by: default avatarAlexey Obitotskiy <aleksey.obitotskiy@intel.com>
    Signed-off-by: default avatarShaohua Li <shli@fb.com>
    11367799
raid5.c 224 KB