• Liu Bo's avatar
    Btrfs: do not cache rbio pages if using raid6 recover · 44ac474d
    Liu Bo authored
    Since raid6 recover tries all possible combinations of failed stripes,
    
    - when raid6 rebuild algorithm is used, i.e. raid6_datap_recov() and
      raid6_2data_recov(), it may change the in-memory content of failed
      stripes, if such a raid bio is cached, a later raid write rmw or recover
      can steal @stripe_pages from it instead of reading from disks, such that
      it carries the wrong content to do write rmw or recovery and ends up
      with corruption or recovery failures.
    
    - when raid5 rebuild algorithm is used, i.e. xor, raid bio can be cached
      because the only failed stripe which contains @rbio->bio_pages gets
      modified, others remain the same so that their in-memory content is
      consistent with their on-disk content.
    
    This adds a check to skip caching rbio if using raid6 recover.
    Signed-off-by: default avatarLiu Bo <bo.li.liu@oracle.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    44ac474d
raid56.c 67.8 KB