btrfs-progs: export read_extent_data function
authorQu Wenruo <quwenruo@cn.fujitsu.com>
Wed, 17 Jun 2015 07:49:00 +0000 (15:49 +0800)
committerDavid Sterba <dsterba@suse.cz>
Wed, 17 Jun 2015 14:08:35 +0000 (16:08 +0200)
Export it for later btrfs-map-logical cleanup.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
cmds-check.c
disk-io.c
disk-io.h

index db121b1..778f141 100644 (file)
@@ -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) {
index a6e6056..6a53843 100644 (file)
--- 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)
index 2d625da..d3e3aaa 100644 (file)
--- 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,