btrfs-progs: check: lowmem: Refactor extent type checks in check_file_extent

Make the checks in check_file_extent a bit more explicit. First we check
for unknown type and fail accordingly. Then we check for inline extent
and handle it in the newly introduced check_file_extent_inline. Finally
if none of the above checks triggered then we must have a regular or
prealloc extents.

Reviewed-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Lu Fengqi <lufq.fnst@cn.fujitsu.com>
Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
master
Nikolay Borisov 2018-09-13 15:05:07 +03:00 committed by David Sterba
parent a9cddf632f
commit bf60039cbe
1 changed files with 6 additions and 5 deletions

View File

@ -1908,21 +1908,22 @@ static int check_file_extent(struct btrfs_root *root, struct btrfs_path *path,
btrfs_item_key_to_cpu(node, &fkey, slot);
fi = btrfs_item_ptr(node, slot, struct btrfs_file_extent_item);
/* Check inline extent */
extent_type = btrfs_file_extent_type(node, fi);
if (extent_type == BTRFS_FILE_EXTENT_INLINE)
return check_file_extent_inline(root, path, size, end);
/* Check extent type */
if (extent_type != BTRFS_FILE_EXTENT_REG &&
extent_type != BTRFS_FILE_EXTENT_PREALLOC) {
extent_type != BTRFS_FILE_EXTENT_PREALLOC &&
extent_type != BTRFS_FILE_EXTENT_INLINE) {
err |= FILE_EXTENT_ERROR;
error("root %llu EXTENT_DATA[%llu %llu] type bad",
root->objectid, fkey.objectid, fkey.offset);
return err;
}
/* Check inline extent */
if (extent_type == BTRFS_FILE_EXTENT_INLINE)
return check_file_extent_inline(root, path, size, end);
/* Check REG_EXTENT/PREALLOC_EXTENT */
disk_bytenr = btrfs_file_extent_disk_bytenr(node, fi);
disk_num_bytes = btrfs_file_extent_disk_num_bytes(node, fi);