• Qu Wenruo's avatar
    btrfs: use btrfs_dev_name() helper to handle missing devices better · cb3e217b
    Qu Wenruo authored
    [BUG]
    If dev-replace failed to re-construct its data/metadata, the kernel
    message would be incorrect for the missing device:
    
     BTRFS info (device dm-1): dev_replace from <missing disk> (devid 2) to /dev/mapper/test-scratch2 started
     BTRFS error (device dm-1): failed to rebuild valid logical 38862848 for dev (efault)
    
    Note the above "dev (efault)" of the second line.
    While the first line is properly reporting "<missing disk>".
    
    [CAUSE]
    Although dev-replace is using btrfs_dev_name(), the heavy lifting work
    is still done by scrub (scrub is reused by both dev-replace and regular
    scrub).
    
    Unfortunately scrub code never uses btrfs_dev_name() helper, as it's
    only declared locally inside dev-replace.c.
    
    [FIX]
    Fix the output by:
    
    - Move the btrfs_dev_name() helper to volumes.h
    
    - Use btrfs_dev_name() to replace open-coded rcu_str_deref() calls
      Only zoned code is not touched, as I'm not familiar with degraded
      zoned code.
    
    - Constify return value and parameter
    
    Now the output looks pretty sane:
    
     BTRFS info (device dm-1): dev_replace from <missing disk> (devid 2) to /dev/mapper/test-scratch2 started
     BTRFS error (device dm-1): failed to rebuild valid logical 38862848 for dev <missing disk>
    Reviewed-by: default avatarAnand Jain <anand.jain@oracle.com>
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    cb3e217b
dev-replace.c 37.6 KB