• Miao Xie's avatar
    Btrfs: fix writing data into the seed filesystem · d20983b4
    Miao Xie authored
    If we mounted a seed filesystem with degraded option, and then added a new
    device into the seed filesystem, then we found adding device failed because
    of the IO failure.
    
    Steps to reproduce:
     # mkfs.btrfs -d raid1 -m raid1 <dev0> <dev1>
     # btrfstune -S 1 <dev0>
     # mount <dev0> -o degraded <mnt>
     # btrfs device add -f <dev2> <mnt>
    
    It is because the original didn't set the chunk on the seed device to be
    read-only if the degraded flag was set. It was introduced by patch f48b9075,
    which fixed the problem the raid1 filesystem became read-only after one device
    of it was missing. But this fix method was not right, we should set the read-only
    flag according to the number of the missing devices, not the degraded mount
    option, if the number of the missing devices is less than the max error number
    that the profile of the chunk tolerates, we don't set it to be read-only.
    
    Cc: Josef Bacik <jbacik@fb.com>
    Signed-off-by: default avatarMiao Xie <miaox@cn.fujitsu.com>
    Reviewed-by: default avatarLiu Bo <bo.li.liu@oracle.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    d20983b4
volumes.c 166 KB