Re: [PATCH 2/2] btrfs: rescue/zero-log: Manually write all supers to handle extent tree error more gracefully

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Nov 11, 2019 at 03:50:59PM +0800, Qu Wenruo wrote:
> [BUG]
> Even "btrfs rescue zero-log" only reset btrfs_super_block::log_root and
> btrfs_super_block::log_root_level, we still use trasction to write all
> super blocks for all devices.
> 
> This means we can't handle things like corrupted extent tree:
> 
>   checksum verify failed on 2172747776 found 000000B6 wanted 00000000
>   checksum verify failed on 2172747776 found 000000B6 wanted 00000000
>   bad tree block 2172747776, bytenr mismatch, want=2172747776, have=0
>   WARNING: could not setup extent tree, skipping it
>   Clearing log on /dev/nvme/btrfs, previous log_root 0, level 0
>   ERROR: Corrupted fs, no valid METADATA block group found
>   ERROR: attempt to start transaction over already running one
> 
> [CAUSE]
> Because we have extra check in transaction code to ensure we have valid
> METADATA block groups.
> 
> In fact we don't really need transaction at all.
> 
> [FIX]
> Instead of commit transaction, we can just call write_all_supers()
> manually, so we can still handle multi-device fs while avoid above
> error.
> 
> Also, add OPEN_CTREE_NO_BLOCK_GROUPS open ctree flag to make it more
> robust.
> 
> Reported-by: Christian Pernegger <pernegger@xxxxxxxxx>
> Signed-off-by: Qu Wenruo <wqu@xxxxxxxx>

Thanks, v1 has been replaced.



[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux