• Qu Wenruo's avatar
    btrfs: scrub: respect the read-only flag during repair · 1f2030ff
    Qu Wenruo authored
    [BUG]
    With recent scrub rework, the scrub operation no longer respects the
    read-only flag passed by "-r" option of "btrfs scrub start" command.
    
      # mkfs.btrfs -f -d raid1 $dev1 $dev2
      # mount $dev1 $mnt
      # xfs_io -f -d -c "pwrite -b 128K -S 0xaa 0 128k" $mnt/file
      # sync
      # xfs_io -c "pwrite -S 0xff $phy1 64k" $dev1
      # xfs_io -c "pwrite -S 0xff $((phy2 + 65536)) 64k" $dev2
      # mount $dev1 $mnt -o ro
      # btrfs scrub start -BrRd $mnt
      Scrub device $dev1 (id 1) done
      Scrub started:    Tue Jun  6 09:59:14 2023
      Status:           finished
      Duration:         0:00:00
             [...]
      	corrected_errors: 16 <<< Still has corrupted sectors
      	last_physical: 1372585984
    
      Scrub device $dev2 (id 2) done
      Scrub started:    Tue Jun  6 09:59:14 2023
      Status:           finished
      Duration:         0:00:00
             [...]
      	corrected_errors: 16 <<< Still has corrupted sectors
      	last_physical: 1351614464
    
      # btrfs scrub start -BrRd $mnt
      Scrub device $dev1 (id 1) done
      Scrub started:    Tue Jun  6 10:00:17 2023
      Status:           finished
      Duration:         0:00:00
             [...]
      	corrected_errors: 0 <<< No more errors
      	last_physical: 1372585984
    
      Scrub device $dev2 (id 2) done
             [...]
      	corrected_errors: 0 <<< No more errors
      	last_physical: 1372585984
    
    [CAUSE]
    In the newly reworked scrub code, repair is always submitted no matter
    if we're doing a read-only scrub.
    
    [FIX]
    Fix it by skipping the write submission if the scrub is a read-only one.
    
    Unfortunately for the report part, even for a read-only scrub we will
    still report it as corrected errors, as we know it's repairable, even we
    won't really submit the write.
    
    Fixes: e02ee89b ("btrfs: scrub: switch scrub_simple_mirror() to scrub_stripe infrastructure")
    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>
    1f2030ff
scrub.c 85.9 KB