summaryrefslogtreecommitdiff
path: root/block/blk-mq.c
diff options
context:
space:
mode:
Diffstat (limited to 'block/blk-mq.c')
-rw-r--r--block/blk-mq.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 3217139d2e0b..cd5f31c4d2fd 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -3014,6 +3014,27 @@ free_and_out:
}
EXPORT_SYMBOL_GPL(blk_rq_prep_clone);
+/*
+ * Steal bios from a request and add them to a bio list.
+ * The request must not have been partially completed before.
+ */
+void blk_steal_bios(struct bio_list *list, struct request *rq)
+{
+ if (rq->bio) {
+ if (list->tail)
+ list->tail->bi_next = rq->bio;
+ else
+ list->head = rq->bio;
+ list->tail = rq->biotail;
+
+ rq->bio = NULL;
+ rq->biotail = NULL;
+ }
+
+ rq->__data_len = 0;
+}
+EXPORT_SYMBOL_GPL(blk_steal_bios);
+
static size_t order_to_size(unsigned int order)
{
return (size_t)PAGE_SIZE << order;