Lines Matching refs:clone

21 	struct request *orig, *clone;  member
82 static void end_clone_bio(struct bio *clone) in end_clone_bio() argument
85 container_of(clone, struct dm_rq_clone_bio_info, clone); in end_clone_bio()
88 blk_status_t error = clone->bi_status; in end_clone_bio()
89 bool is_last = !clone->bi_next; in end_clone_bio()
91 bio_put(clone); in end_clone_bio()
164 static void dm_end_request(struct request *clone, blk_status_t error) in dm_end_request() argument
166 struct dm_rq_target_io *tio = clone->end_io_data; in dm_end_request()
170 blk_rq_unprep_clone(clone); in dm_end_request()
171 tio->ti->type->release_clone_rq(clone, NULL); in dm_end_request()
202 if (tio->clone) { in dm_requeue_original_request()
203 blk_rq_unprep_clone(tio->clone); in dm_requeue_original_request()
204 tio->ti->type->release_clone_rq(tio->clone, NULL); in dm_requeue_original_request()
211 static void dm_done(struct request *clone, blk_status_t error, bool mapped) in dm_done() argument
214 struct dm_rq_target_io *tio = clone->end_io_data; in dm_done()
221 r = rq_end_io(tio->ti, clone, error, &tio->info); in dm_done()
225 if (req_op(clone) == REQ_OP_DISCARD && in dm_done()
226 !clone->q->limits.max_discard_sectors) in dm_done()
228 else if (req_op(clone) == REQ_OP_WRITE_SAME && in dm_done()
229 !clone->q->limits.max_write_same_sectors) in dm_done()
231 else if (req_op(clone) == REQ_OP_WRITE_ZEROES && in dm_done()
232 !clone->q->limits.max_write_zeroes_sectors) in dm_done()
239 dm_end_request(clone, error); in dm_done()
265 struct request *clone = tio->clone; in dm_softirq_done() local
267 if (!clone) { in dm_softirq_done()
279 dm_done(clone, tio->error, mapped); in dm_softirq_done()
306 static void end_clone_request(struct request *clone, blk_status_t error) in end_clone_request() argument
308 struct dm_rq_target_io *tio = clone->end_io_data; in end_clone_request()
313 static blk_status_t dm_dispatch_clone_request(struct request *clone, struct request *rq) in dm_dispatch_clone_request() argument
317 if (blk_queue_io_stat(clone->q)) in dm_dispatch_clone_request()
318 clone->rq_flags |= RQF_IO_STAT; in dm_dispatch_clone_request()
320 clone->start_time_ns = ktime_get_ns(); in dm_dispatch_clone_request()
321 r = blk_insert_cloned_request(clone->q, clone); in dm_dispatch_clone_request()
333 container_of(bio, struct dm_rq_clone_bio_info, clone); in dm_rq_bio_constructor()
342 static int setup_clone(struct request *clone, struct request *rq, in setup_clone() argument
347 r = blk_rq_prep_clone(clone, rq, &tio->md->bs, gfp_mask, in setup_clone()
352 clone->end_io = end_clone_request; in setup_clone()
353 clone->end_io_data = tio; in setup_clone()
355 tio->clone = clone; in setup_clone()
365 tio->clone = NULL; in init_tio()
390 struct request *clone = NULL; in map_request() local
393 r = ti->type->clone_and_map_rq(ti, rq, &tio->info, &clone); in map_request()
399 if (setup_clone(clone, rq, tio, GFP_ATOMIC)) { in map_request()
401 ti->type->release_clone_rq(clone, &tio->info); in map_request()
406 trace_block_rq_remap(clone->q, clone, disk_devt(dm_disk(md)), in map_request()
408 ret = dm_dispatch_clone_request(clone, rq); in map_request()
410 blk_rq_unprep_clone(clone); in map_request()
411 blk_mq_cleanup_rq(clone); in map_request()
412 tio->ti->type->release_clone_rq(clone, &tio->info); in map_request()
413 tio->clone = NULL; in map_request()