From: Qu Wenruo Date: Wed, 17 Jun 2015 07:49:00 +0000 (+0800) Subject: btrfs-progs: export read_extent_data function X-Git-Tag: upstream/4.16.1~2158 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0074cd315c9e82e4f0ff8348b77d785da7eb487b;p=platform%2Fupstream%2Fbtrfs-progs.git btrfs-progs: export read_extent_data function Export it for later btrfs-map-logical cleanup. Signed-off-by: Qu Wenruo Signed-off-by: David Sterba --- diff --git a/cmds-check.c b/cmds-check.c index db121b1..778f141 100644 --- a/cmds-check.c +++ b/cmds-check.c @@ -5235,40 +5235,6 @@ static int check_space_cache(struct btrfs_root *root) return error ? -EINVAL : 0; } -static int read_extent_data(struct btrfs_root *root, char *data, - u64 logical, u64 *len, int mirror) -{ - u64 offset = 0; - struct btrfs_multi_bio *multi = NULL; - struct btrfs_fs_info *info = root->fs_info; - struct btrfs_device *device; - int ret = 0; - u64 max_len = *len; - - ret = btrfs_map_block(&info->mapping_tree, READ, logical, len, - &multi, mirror, NULL); - if (ret) { - fprintf(stderr, "Couldn't map the block %llu\n", - logical + offset); - goto err; - } - device = multi->stripes[0].dev; - - if (device->fd == 0) - goto err; - if (*len > max_len) - *len = max_len; - - ret = pread64(device->fd, data, *len, multi->stripes[0].physical); - if (ret != *len) - ret = -EIO; - else - ret = 0; -err: - kfree(multi); - return ret; -} - static int check_extent_csums(struct btrfs_root *root, u64 bytenr, u64 num_bytes, unsigned long leaf_offset, struct extent_buffer *eb) { diff --git a/disk-io.c b/disk-io.c index a6e6056..6a53843 100644 --- a/disk-io.c +++ b/disk-io.c @@ -366,6 +366,40 @@ struct extent_buffer *read_tree_block(struct btrfs_root *root, u64 bytenr, return ERR_PTR(ret); } +int read_extent_data(struct btrfs_root *root, char *data, + u64 logical, u64 *len, int mirror) +{ + u64 offset = 0; + struct btrfs_multi_bio *multi = NULL; + struct btrfs_fs_info *info = root->fs_info; + struct btrfs_device *device; + int ret = 0; + u64 max_len = *len; + + ret = btrfs_map_block(&info->mapping_tree, READ, logical, len, + &multi, mirror, NULL); + if (ret) { + fprintf(stderr, "Couldn't map the block %llu\n", + logical + offset); + goto err; + } + device = multi->stripes[0].dev; + + if (device->fd == 0) + goto err; + if (*len > max_len) + *len = max_len; + + ret = pread64(device->fd, data, *len, multi->stripes[0].physical); + if (ret != *len) + ret = -EIO; + else + ret = 0; +err: + kfree(multi); + return ret; +} + int write_and_map_eb(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct extent_buffer *eb) diff --git a/disk-io.h b/disk-io.h index 2d625da..d3e3aaa 100644 --- a/disk-io.h +++ b/disk-io.h @@ -69,6 +69,8 @@ struct btrfs_device; int read_whole_eb(struct btrfs_fs_info *info, struct extent_buffer *eb, int mirror); struct extent_buffer *read_tree_block(struct btrfs_root *root, u64 bytenr, u32 blocksize, u64 parent_transid); +int read_extent_data(struct btrfs_root *root, char *data, u64 logical, + u64 *len, int mirror); void readahead_tree_block(struct btrfs_root *root, u64 bytenr, u32 blocksize, u64 parent_transid); struct extent_buffer *btrfs_find_create_tree_block(struct btrfs_root *root,