• Qu Wenruo's avatar
    btrfs: Introduce a function to check if all chunks a OK for degraded rw mount · 21634a19
    Qu Wenruo authored
    Introduce a new function, btrfs_check_rw_degradable(), to check if all
    chunks in btrfs is OK for degraded rw mount.
    
    It provides the new basis for accurate btrfs mount/remount and even
    runtime degraded mount check other than old one-size-fit-all method.
    
    Btrfs currently uses num_tolerated_disk_barrier_failures to do global
    check for tolerated missing device.
    
    Although the one-size-fit-all solution is quite safe, it's too strict
    if data and metadata has different duplication level.
    
    For example, if one use Single data and RAID1 metadata for 2 disks, it
    means any missing device will make the fs unable to be degraded
    mounted.
    
    But in fact, some times all single chunks may be in the existing
    device and in that case, we should allow it to be rw degraded mounted.
    
    Such case can be easily reproduced using the following script:
     # mkfs.btrfs -f -m raid1 -d sing /dev/sdb /dev/sdc
     # wipefs -f /dev/sdc
     # mount /dev/sdb -o degraded,rw
    
    If using btrfs-debug-tree to check /dev/sdb, one should find that the
    data chunk is only in sdb, so in fact it should allow degraded mount.
    
    This patchset will introduce a new per-chunk degradable check for
    btrfs, allow above case to succeed, and it's quite small anyway.
    Signed-off-by: default avatarQu Wenruo <quwenruo@cn.fujitsu.com>
    Signed-off-by: default avatarAnand Jain <anand.jain@oracle.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    [ copied text from cover letter with more details about the problem being
      solved ]
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    21634a19
volumes.h 16 KB