Re: [PATCH 7/7] btrfs-progs: Fix super-recovery

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

 




On 2017年12月05日 16:39, Nikolay Borisov wrote:
> Commit 3296d058b7ce ("btrfs-progs: super-recover: Reuse
>  btrfs_read_dev_super function")

Oh my fault.

> 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: Nikolay Borisov <nborisov@xxxxxxxx>

Reviewed-by: Qu Wenruo <wqu@xxxxxxxx>

Thanks,
Qu
> ---
>  super-recover.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/super-recover.c b/super-recover.c
> index e12513100f17..880fd7712546 100644
> --- a/super-recover.c
> +++ b/super-recover.c
> @@ -136,7 +136,7 @@ read_dev_supers(char *filename, struct btrfs_recover_superblock *recover)
>  			max_gen = btrfs_super_generation(sb);
>  			if (max_gen > recover->max_generation)
>  				recover->max_generation = max_gen;
> -		} else if (ret == -EIO){
> +		} else if (ret != -ENOENT){
>  			/*
>  			 * Skip superblock which doesn't exist, only adds
>  			 * really corrupted superblock
> 

Attachment: signature.asc
Description: OpenPGP digital signature


[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