On 2018年04月03日 13:51, Nikolay Borisov wrote:
> 
> 
> On  3.04.2018 08:39, Qu Wenruo wrote:
>> For metadata dump (fs restored by btrfs-image), since no data is
>> restored check sum verification will definitely report error.
>>
>> Add such check in check_csums() and prompt for user.
>>
>> Issue: #103
>> Signed-off-by: Qu Wenruo <w...@suse.com>
> 
> Reviewed-by: Nikolay Borisov <nbori...@suse.com>
> 
>> ---
>>  check/main.c | 13 ++++++++++++-
>>  1 file changed, 12 insertions(+), 1 deletion(-)
>>
>> diff --git a/check/main.c b/check/main.c
>> index 891a6d797756..15c94543946a 100644
>> --- a/check/main.c
>> +++ b/check/main.c
>> @@ -5601,6 +5601,7 @@ static int check_csums(struct btrfs_root *root)
>>      int ret;
>>      u64 data_len;
>>      unsigned long leaf_offset;
>> +    bool verify_csum = !!check_data_csum;
> 
> nit: Why don't you convert check_data_csum to bool in this patch.

Next thing to do.

> My
> recent testing in !! usage showed that it's generating quite a number of
> additional instructions.

That's pretty interesting.

Would you please shared some more info about this?

Thanks,
Qu

> Not that it will have big impact in this case
> though.
> 
>>  
>>      root = root->fs_info->csum_root;
>>      if (!extent_buffer_uptodate(root->node)) {
>> @@ -5623,6 +5624,16 @@ static int check_csums(struct btrfs_root *root)
>>              path.slots[0]--;
>>      ret = 0;
>>  
>> +    /*
>> +     * For metadata dump (btrfs-image) all data is wiped so verifying data
>> +     * csum is meaningless and will always report csum error.
>> +     */
>> +    if (check_data_csum && (btrfs_super_flags(root->fs_info->super_copy) &
>> +        (BTRFS_SUPER_FLAG_METADUMP | BTRFS_SUPER_FLAG_METADUMP_V2))) {
>> +            printf("skip data csum verification for metadata dump\n");
>> +            verify_csum = false;
>> +    }
>> +
>>      while (1) {
>>              if (path.slots[0] >= btrfs_header_nritems(path.nodes[0])) {
>>                      ret = btrfs_next_leaf(root, &path);
>> @@ -5644,7 +5655,7 @@ static int check_csums(struct btrfs_root *root)
>>  
>>              data_len = (btrfs_item_size_nr(leaf, path.slots[0]) /
>>                            csum_size) * root->fs_info->sectorsize;
>> -            if (!check_data_csum)
>> +            if (!verify_csum)
>>                      goto skip_csum_check;
>>              leaf_offset = btrfs_item_ptr_offset(leaf, path.slots[0]);
>>              ret = check_extent_csums(root, key.offset, data_len,
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to