btrfs: return EUCLEAN if extent_inline_ref type is invalid
If type of extent_inline_ref found is not expected, filesystem may have been corrupted, should return EUCLEAN instead of EINVAL. Signed-off-by: Su Yue <suy.fnst@cn.fujitsu.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
e4af400a9c
commit
af431dcb24
|
@ -925,7 +925,7 @@ static int add_inline_refs(const struct btrfs_fs_info *fs_info,
|
|||
type = btrfs_get_extent_inline_ref_type(leaf, iref,
|
||||
BTRFS_REF_TYPE_ANY);
|
||||
if (type == BTRFS_REF_TYPE_INVALID)
|
||||
return -EINVAL;
|
||||
return -EUCLEAN;
|
||||
|
||||
offset = btrfs_extent_inline_ref_offset(leaf, iref);
|
||||
|
||||
|
@ -1793,7 +1793,7 @@ static int get_extent_inline_ref(unsigned long *ptr,
|
|||
*out_type = btrfs_get_extent_inline_ref_type(eb, *out_eiref,
|
||||
BTRFS_REF_TYPE_ANY);
|
||||
if (*out_type == BTRFS_REF_TYPE_INVALID)
|
||||
return -EINVAL;
|
||||
return -EUCLEAN;
|
||||
|
||||
*ptr += btrfs_extent_inline_ref_size(*out_type);
|
||||
WARN_ON(*ptr > end);
|
||||
|
|
|
@ -1719,7 +1719,7 @@ again:
|
|||
iref = (struct btrfs_extent_inline_ref *)ptr;
|
||||
type = btrfs_get_extent_inline_ref_type(leaf, iref, needed);
|
||||
if (type == BTRFS_REF_TYPE_INVALID) {
|
||||
err = -EINVAL;
|
||||
err = -EUCLEAN;
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
|
@ -792,7 +792,7 @@ again:
|
|||
type = btrfs_get_extent_inline_ref_type(eb, iref,
|
||||
BTRFS_REF_TYPE_BLOCK);
|
||||
if (type == BTRFS_REF_TYPE_INVALID) {
|
||||
err = -EINVAL;
|
||||
err = -EUCLEAN;
|
||||
goto out;
|
||||
}
|
||||
key.type = type;
|
||||
|
@ -3801,7 +3801,7 @@ int add_data_references(struct reloc_control *rc,
|
|||
ret = find_data_references(rc, extent_key,
|
||||
eb, dref, blocks);
|
||||
} else {
|
||||
ret = -EINVAL;
|
||||
ret = -EUCLEAN;
|
||||
btrfs_err(rc->extent_root->fs_info,
|
||||
"extent %llu slot %d has an invalid inline ref type",
|
||||
eb->start, path->slots[0]);
|
||||
|
|
Loading…
Reference in New Issue