• Qu Wenruo's avatar
    btrfs: introduce a new helper to submit write bio for repair · 4886ff7b
    Qu Wenruo authored
    Both scrub and read-repair are utilizing a special repair writes that:
    
    - Only writes back to a single device
      Even for read-repair on RAID56, we only update the corrupted data
      stripe itself, not triggering the full RMW path.
    
    - Requires a valid @mirror_num
      For RAID56 case, only @mirror_num == 1 is valid.
      For non-RAID56 cases, we need @mirror_num to locate our stripe.
    
    - No data csum generation needed
    
    These two call sites still have some differences though:
    
    - Read-repair goes plain bio
      It doesn't need a full btrfs_bio, and goes submit_bio_wait().
    
    - New scrub repair would go btrfs_bio
      To simplify both read and write path.
    
    So here this patch would:
    
    - Introduce a common helper, btrfs_map_repair_block()
      Due to the single device nature, we can use an on-stack
      btrfs_io_stripe to pass device and its physical bytenr.
    
    - Introduce a new interface, btrfs_submit_repair_bio(), for later scrub
      code
      This is for the incoming scrub code.
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    4886ff7b
volumes.c 217 KB