diff options
author | David Sterba <dsterba@suse.com> | 2016-11-08 20:30:31 +0300 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2016-11-30 15:45:17 +0300 |
commit | 58e8012cc12b3cdebea118981c4fd7136d52f2c7 (patch) | |
tree | 5cda8d4a202fc99ee64be2de43c251b4982c993e /fs/btrfs/extent_io.c | |
parent | b159fa2808b1b53d784807a48ad95fa809be10b0 (diff) | |
download | linux-58e8012cc12b3cdebea118981c4fd7136d52f2c7.tar.xz |
btrfs: add optimized version of eb to eb copy
Using copy_extent_buffer is suitable for copying betwenn buffers from an
arbitrary offset and deals with page boundaries. This is not necessary
when doing a full extent_buffer-to-extent_buffer copy. We can utilize
the copy_page helper as well.
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/extent_io.c')
-rw-r--r-- | fs/btrfs/extent_io.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 9f8a1a331c61..d24af9dc76c7 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -5546,6 +5546,20 @@ void memzero_extent_buffer(struct extent_buffer *eb, unsigned long start, } } +void copy_extent_buffer_full(struct extent_buffer *dst, + struct extent_buffer *src) +{ + int i; + unsigned num_pages; + + ASSERT(dst->len == src->len); + + num_pages = num_extent_pages(dst->start, dst->len); + for (i = 0; i < num_pages; i++) + copy_page(page_address(dst->pages[i]), + page_address(src->pages[i])); +} + void copy_extent_buffer(struct extent_buffer *dst, struct extent_buffer *src, unsigned long dst_offset, unsigned long src_offset, unsigned long len) |