Lines Matching refs:clone
20 struct request *orig, *clone; member
77 static void end_clone_bio(struct bio *clone) in end_clone_bio() argument
80 container_of(clone, struct dm_rq_clone_bio_info, clone); in end_clone_bio()
83 blk_status_t error = clone->bi_status; in end_clone_bio()
84 bool is_last = !clone->bi_next; in end_clone_bio()
86 bio_put(clone); in end_clone_bio()
155 static void dm_end_request(struct request *clone, blk_status_t error) in dm_end_request() argument
157 struct dm_rq_target_io *tio = clone->end_io_data; in dm_end_request()
161 blk_rq_unprep_clone(clone); in dm_end_request()
162 tio->ti->type->release_clone_rq(clone, NULL); in dm_end_request()
193 if (tio->clone) { in dm_requeue_original_request()
194 blk_rq_unprep_clone(tio->clone); in dm_requeue_original_request()
195 tio->ti->type->release_clone_rq(tio->clone, NULL); in dm_requeue_original_request()
202 static void dm_done(struct request *clone, blk_status_t error, bool mapped) in dm_done() argument
205 struct dm_rq_target_io *tio = clone->end_io_data; in dm_done()
212 r = rq_end_io(tio->ti, clone, error, &tio->info); in dm_done()
216 if (req_op(clone) == REQ_OP_DISCARD && in dm_done()
217 !clone->q->limits.max_discard_sectors) in dm_done()
219 else if (req_op(clone) == REQ_OP_WRITE_ZEROES && in dm_done()
220 !clone->q->limits.max_write_zeroes_sectors) in dm_done()
227 dm_end_request(clone, error); in dm_done()
253 struct request *clone = tio->clone; in dm_softirq_done() local
255 if (!clone) { in dm_softirq_done()
267 dm_done(clone, tio->error, mapped); in dm_softirq_done()
295 static enum rq_end_io_ret end_clone_request(struct request *clone, in end_clone_request() argument
298 struct dm_rq_target_io *tio = clone->end_io_data; in end_clone_request()
309 container_of(bio, struct dm_rq_clone_bio_info, clone); in dm_rq_bio_constructor()
318 static int setup_clone(struct request *clone, struct request *rq, in setup_clone() argument
323 r = blk_rq_prep_clone(clone, rq, &tio->md->mempools->bs, gfp_mask, in setup_clone()
328 clone->end_io = end_clone_request; in setup_clone()
329 clone->end_io_data = tio; in setup_clone()
331 tio->clone = clone; in setup_clone()
341 tio->clone = NULL; in init_tio()
366 struct request *clone = NULL; in map_request() local
369 r = ti->type->clone_and_map_rq(ti, rq, &tio->info, &clone); in map_request()
375 if (setup_clone(clone, rq, tio, GFP_ATOMIC)) { in map_request()
377 ti->type->release_clone_rq(clone, &tio->info); in map_request()
382 trace_block_rq_remap(clone, disk_devt(dm_disk(md)), in map_request()
384 ret = blk_insert_cloned_request(clone); in map_request()
390 blk_rq_unprep_clone(clone); in map_request()
391 blk_mq_cleanup_rq(clone); in map_request()
392 tio->ti->type->release_clone_rq(clone, &tio->info); in map_request()
393 tio->clone = NULL; in map_request()