Skip to content
  • Nikolay Borisov's avatar
    btrfs-progs: super-recover: fix the broken sb detection · 4487aa64
    Nikolay Borisov authored
    Commit 3296d058
    
     ("btrfs-progs: super-recover: Reuse
     btrfs_read_dev_super function") changed the logic when a superblock
    is added to the bad block list to depend on -EIO. However currently
    btrfs_read_dev_super doesn't return -EIO when the fist super block
    is broken. Instead it returns -1. This causes the super-recovery
    logic to miss the fact that the first super block is completely broken.
    
    Fix this by considering any error code from btrfs_read_dev_super other
    than -ENOENT to mean that the super block is corrupted. -ENOENT
    means that the superblock copy is not part of the fs i.e. it's smaller
    than the offset of the block. This can only occur for the 2nd copy at
    256gb mark.
    
    Signed-off-by: default avatarNikolay Borisov <nborisov@suse.com>
    Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    4487aa64