• Qu Wenruo's avatar
    btrfs: scrub: remove scrub_parity structure · 5dc96f8d
    Qu Wenruo authored
    The structure scrub_parity is used to indicate that some extents are
    scrubbed for the purpose of RAID56 P/Q scrubbing.
    
    Since the whole RAID56 P/Q scrubbing path has been replaced with new
    scrub_stripe infrastructure, and we no longer need to use scrub_parity
    to modify the behavior of data stripes, we can remove it completely.
    
    This removal involves:
    
    - scrub_parity_workers
      Now only one worker would be utilized, scrub_workers, to do the read
      and repair.
      All writeback would happen at the main scrub thread.
    
    - scrub_block::sparity member
    - scrub_parity structure
    - function scrub_parity_get()
    - function scrub_parity_put()
    - function scrub_free_parity()
    
    - function __scrub_mark_bitmap()
    - function scrub_parity_mark_sectors_error()
    - function scrub_parity_mark_sectors_data()
      These helpers are no longer needed, scrub_stripe has its bitmaps and
      we can use bitmap helpers to get the error/data status.
    
    - scrub_parity_bio_endio()
    - scrub_parity_check_and_repair()
    - function scrub_sectors_for_parity()
    - function scrub_extent_for_parity()
    - function scrub_raid56_data_stripe_for_parity()
    - function scrub_raid56_parity()
      The new code would reuse the scrub read-repair and writeback path.
      Just skip the dev-replace phase.
      And scrub_stripe infrastructure allows us to submit and wait for those
      data stripes before scrubbing P/Q, without extra infrastructure.
    
    The following two functions are temporarily exported for later cleanup:
    
    - scrub_find_csum()
    - scrub_add_sector_to_rd_bio()
    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>
    5dc96f8d
scrub.c 141 KB