• Qu Wenruo's avatar
    btrfs: raid56: migrate recovery and scrub recovery path to use error_bitmap · 75b47033
    Qu Wenruo authored
    Since we have rbio::error_bitmap to indicate exactly where the errors
    are (including read error and csum mismatch error), we can make recovery
    path more accurate.
    
    For example:
    
                 0        32K       64K
         Data 1  |XXXXXXXX|         |
         Data 2  |        |XXXXXXXXX|
         Parity  |        |         |
    
    1) Get csum mismatch when reading data 1 [0, 32K)
    
    2) Mark corresponding range error
       The old code will mark the whole data 1 stripe as error.
       While the new code will only mark data 1 [0, 32K) as error.
    
    3) Recovery path
       The old code will recover data 1 [0, 64K), all using Data 2 and
       parity.
    
       This means, Data 1 [32K, 64K) will be corrupted data, as data 2
       [32K, 64K) is already corrupted.
    
       While the new code will only recover data 1 [0, 32K), as only
       that range has error so far.
    
    This new behavior can avoid populating rbio cache with incorrect data.
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    75b47033
raid56.c 73.1 KB