[snip]
>
>> + }
>> +
>> + read_extent_buffer(leaf, &ri, btrfs_item_ptr_offset(leaf, slot),
>> + sizeof(ri));
>> +
>> + /* Generateion related */
>
> typo here and a few more times below
>
>> + if (btrfs_root_generation(&ri) >
>> + btrfs_super_generation(fs_info->super_copy) + 1) {
>> + generic_err(leaf, slot,
>> + "invalid root generaetion, have %llu expect (0, %llu]",
>> + btrfs_root_generation(&ri),
>> + btrfs_super_generation(fs_info->super_copy) + 1);
>> + return -EUCLEAN;
>> + }
>> + if (btrfs_root_generation_v2(&ri) >
>> + btrfs_super_generation(fs_info->super_copy) + 1) {
>> + generic_err(leaf, slot,
>> + "invalid root v2 generaetion, have %llu expect (0, %llu]",
>
> So (0, %llu] here means that it must be greater than zero, right? I'm
> not sure that everyone uses the same notation for open/closed notation.
AFAIK in tree checker it's all the same notation.
Or any better solution for that?
Thanks,
Qu
>
>> + btrfs_root_generation_v2(&ri),
>> + btrfs_super_generation(fs_info->super_copy) + 1);
>> + return -EUCLEAN;
>> + }
>> + if (btrfs_root_last_snapshot(&ri) >
>> + btrfs_super_generation(fs_info->super_copy) + 1) {
>> + generic_err(leaf, slot,
>> + "invalid root last_snapshot, have %llu expect (0, %llu]",
>> + btrfs_root_last_snapshot(&ri),
>> + btrfs_super_generation(fs_info->super_copy) + 1);
>> + return -EUCLEAN;
>> + }
>> +
>> + /* Alignment and level check */
>> + if (!IS_ALIGNED(btrfs_root_bytenr(&ri), fs_info->sectorsize)) {
>> + generic_err(leaf, slot,
>> + "invalid root bytenr, have %llu expect to be aligned to %u",
>> + btrfs_root_bytenr(&ri), fs_info->sectorsize);
>> + return -EUCLEAN;
>> + }
>> + if (btrfs_root_level(&ri) >= BTRFS_MAX_LEVEL) {
>> + generic_err(leaf, slot,
>> + "invalid root level, have %u expect [0, %u]",
>> + btrfs_root_level(&ri), BTRFS_MAX_LEVEL - 1);
>> + return -EUCLEAN;
>> + }
>> + if (ri.drop_level >= BTRFS_MAX_LEVEL) {
>> + generic_err(leaf, slot,
>> + "invalid root level, have %u expect [0, %u]",
>> + ri.drop_level, BTRFS_MAX_LEVEL - 1);
>> + return -EUCLEAN;
>> + }
>> +
>> + /* Flags check */
>> + if (btrfs_root_flags(&ri) & ~valid_root_flags) {
>> + generic_err(leaf, slot,
>> + "invalid root flags, have 0x%llx expect mask 0x%llu",
>
> 0x%llx
>
>> + btrfs_root_flags(&ri), valid_root_flags);
>> + return -EUCLEAN;
>> + }
>> + return 0;
>> +}
>> +
>> /*
>> * Common point to switch the item-specific validation.
>> */
>> @@ -845,6 +934,9 @@ static int check_leaf_item(struct extent_buffer *leaf,
>> case BTRFS_INODE_ITEM_KEY:
>> ret = check_inode_item(leaf, key, slot);
>> break;
>> + case BTRFS_ROOT_ITEM_KEY:
>> + ret = check_root_item(leaf, key, slot);
>> + break;
>> }
>> return ret;
>> }
>> --
>> 2.22.0
Attachment:
signature.asc
Description: OpenPGP digital signature
