Commit f8b679a0 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

block: rewrite bio_copy_data_iter to use bvec_kmap_local and memcpy_to_bvec

Use the proper helpers instead of open coding the copy.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Link: https://lore.kernel.org/r/20210727055646.118787-11-hch@lst.deSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent bda135d9
...@@ -1186,27 +1186,15 @@ EXPORT_SYMBOL(bio_advance); ...@@ -1186,27 +1186,15 @@ EXPORT_SYMBOL(bio_advance);
void bio_copy_data_iter(struct bio *dst, struct bvec_iter *dst_iter, void bio_copy_data_iter(struct bio *dst, struct bvec_iter *dst_iter,
struct bio *src, struct bvec_iter *src_iter) struct bio *src, struct bvec_iter *src_iter)
{ {
struct bio_vec src_bv, dst_bv;
void *src_p, *dst_p;
unsigned bytes;
while (src_iter->bi_size && dst_iter->bi_size) { while (src_iter->bi_size && dst_iter->bi_size) {
src_bv = bio_iter_iovec(src, *src_iter); struct bio_vec src_bv = bio_iter_iovec(src, *src_iter);
dst_bv = bio_iter_iovec(dst, *dst_iter); struct bio_vec dst_bv = bio_iter_iovec(dst, *dst_iter);
unsigned int bytes = min(src_bv.bv_len, dst_bv.bv_len);
bytes = min(src_bv.bv_len, dst_bv.bv_len); void *src_buf;
src_p = kmap_atomic(src_bv.bv_page); src_buf = bvec_kmap_local(&src_bv);
dst_p = kmap_atomic(dst_bv.bv_page); memcpy_to_bvec(&dst_bv, src_buf);
kunmap_local(src_buf);
memcpy(dst_p + dst_bv.bv_offset,
src_p + src_bv.bv_offset,
bytes);
kunmap_atomic(dst_p);
kunmap_atomic(src_p);
flush_dcache_page(dst_bv.bv_page);
bio_advance_iter_single(src, src_iter, bytes); bio_advance_iter_single(src, src_iter, bytes);
bio_advance_iter_single(dst, dst_iter, bytes); bio_advance_iter_single(dst, dst_iter, bytes);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment