• Shaohua Li's avatar
    RAID5: revert e9e4c377 to fix a livelock · 6e3bd6ce
    Shaohua Li authored
    commit 6ab2a4b8 upstream.
    
    Revert commit
    e9e4c377(md/raid5: per hash value and exclusive wait_for_stripe)
    
    The problem is raid5_get_active_stripe waits on
    conf->wait_for_stripe[hash]. Assume hash is 0. My test release stripes
    in this order:
    - release all stripes with hash 0
    - raid5_get_active_stripe still sleeps since active_stripes >
      max_nr_stripes * 3 / 4
    - release all stripes with hash other than 0. active_stripes becomes 0
    - raid5_get_active_stripe still sleeps, since nobody wakes up
      wait_for_stripe[0]
    The system live locks. The problem is active_stripes isn't a per-hash
    count. Revert the patch makes the live lock go away.
    
    Cc: Yuanhan Liu <yuanhan.liu@linux.intel.com>
    Cc: NeilBrown <neilb@suse.de>
    Signed-off-by: default avatarShaohua Li <shli@fb.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    6e3bd6ce
raid5.c 223 KB