Merge branch 'for-5.14/intel-ish' into for-linus
[linux-2.6-microblaze.git] / drivers / block / pktcdvd.c
index fc4b0f1..bd35565 100644 (file)
@@ -1199,6 +1199,42 @@ try_next_bio:
        return 1;
 }
 
+/**
+ * bio_list_copy_data - copy contents of data buffers from one chain of bios to
+ * another
+ * @src: source bio list
+ * @dst: destination bio list
+ *
+ * Stops when it reaches the end of either the @src list or @dst list - that is,
+ * copies min(src->bi_size, dst->bi_size) bytes (or the equivalent for lists of
+ * bios).
+ */
+static void bio_list_copy_data(struct bio *dst, struct bio *src)
+{
+       struct bvec_iter src_iter = src->bi_iter;
+       struct bvec_iter dst_iter = dst->bi_iter;
+
+       while (1) {
+               if (!src_iter.bi_size) {
+                       src = src->bi_next;
+                       if (!src)
+                               break;
+
+                       src_iter = src->bi_iter;
+               }
+
+               if (!dst_iter.bi_size) {
+                       dst = dst->bi_next;
+                       if (!dst)
+                               break;
+
+                       dst_iter = dst->bi_iter;
+               }
+
+               bio_copy_data_iter(dst, &dst_iter, src, &src_iter);
+       }
+}
+
 /*
  * Assemble a bio to write one packet and queue the bio for processing
  * by the underlying block device.