summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent_io.c
diff options
context:
space:
mode:
authorDavid Sterba2016-11-08 18:30:31 +0100
committerDavid Sterba2016-11-30 13:45:17 +0100
commit58e8012cc12b3cdebea118981c4fd7136d52f2c7 (patch)
tree5cda8d4a202fc99ee64be2de43c251b4982c993e /fs/btrfs/extent_io.c
parentbtrfs: remove constant parameter to memset_extent_buffer and rename it (diff)
downloadkernel-qcow2-linux-58e8012cc12b3cdebea118981c4fd7136d52f2c7.tar.gz
kernel-qcow2-linux-58e8012cc12b3cdebea118981c4fd7136d52f2c7.tar.xz
kernel-qcow2-linux-58e8012cc12b3cdebea118981c4fd7136d52f2c7.zip
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.c14
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)