• Li Nan's avatar
    md/raid10: prioritize adding disk to 'removed' mirror · 6090368a
    Li Nan authored
    When add a new disk to raid10, it will traverse conf->mirror from start
    and find one of the following mirror to add:
      1. mirror->rdev is set to WantReplacement and it have no replacement,
         set new disk to mirror->replacement.
      2. no mirror->rdev, set new disk to mirror->rdev.
    
    There is a array as below (sda is set to WantReplacement):
    
        Number   Major   Minor   RaidDevice State
           0       8        0        0      active sync set-A   /dev/sda
           -       0        0        1      removed
           2       8       32        2      active sync set-A   /dev/sdc
           3       8       48        3      active sync set-B   /dev/sdd
    
    Use 'mdadm --add' to add a new disk to this array, the new disk will
    become sda's replacement instead of add to removed position, which is
    confusing for users. Meanwhile, after new disk recovery success, sda
    will be set to Faulty.
    
    Prioritize adding disk to 'removed' mirror is a better choice. In the
    above scenario, the behavior is the same as before, except sda will not
    be deleted. Before other disks are added, continued use sda is more
    reliable.
    Signed-off-by: default avatarLi Nan <linan122@huawei.com>
    Signed-off-by: default avatarSong Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230527092007.3008856-1-linan666@huaweicloud.com
    6090368a
raid10.c 146 KB