• Yufen Yu's avatar
    md: no longer compare spare disk superblock events in super_load · 6a5cb53a
    Yufen Yu authored
    We have a test case as follow:
    
      mdadm -CR /dev/md1 -l 1 -n 4 /dev/sd[a-d] \
    	--assume-clean --bitmap=internal
      mdadm -S /dev/md1
      mdadm -A /dev/md1 /dev/sd[b-c] --run --force
    
      mdadm --zero /dev/sda
      mdadm /dev/md1 -a /dev/sda
    
      echo offline > /sys/block/sdc/device/state
      echo offline > /sys/block/sdb/device/state
      sleep 5
      mdadm -S /dev/md1
    
      echo running > /sys/block/sdb/device/state
      echo running > /sys/block/sdc/device/state
      mdadm -A /dev/md1 /dev/sd[a-c] --run --force
    
    When we readd /dev/sda to the array, it started to do recovery.
    After offline the other two disks in md1, the recovery have
    been interrupted and superblock update info cannot be written
    to the offline disks. While the spare disk (/dev/sda) can continue
    to update superblock info.
    
    After stopping the array and assemble it, we found the array
    run fail, with the follow kernel message:
    
    [  172.986064] md: kicking non-fresh sdb from array!
    [  173.004210] md: kicking non-fresh sdc from array!
    [  173.022383] md/raid1:md1: active with 0 out of 4 mirrors
    [  173.022406] md1: failed to create bitmap (-5)
    [  173.023466] md: md1 stopped.
    
    Since both sdb and sdc have the value of 'sb->events' smaller than
    that in sda, they have been kicked from the array. However, the only
    remained disk sda is in 'spare' state before stop and it cannot be
    added to conf->mirrors[] array. In the end, raid array assemble
    and run fail.
    
    In fact, we can use the older disk sdb or sdc to assemble the array.
    That means we should not choose the 'spare' disk as the fresh disk in
    analyze_sbs().
    
    To fix the problem, we do not compare superblock events when it is
    a spare disk, as same as validate_super.
    Signed-off-by: default avatarYufen Yu <yuyufen@huawei.com>
    Signed-off-by: default avatarSong Liu <songliubraving@fb.com>
    6a5cb53a
md.c 253 KB