Hi Jens, On 06/10/2009 03:03 AM +0900, Jens Axboe wrote: > On Tue, Jun 09 2009, Kiyoshi Ueda wrote: >> Hi Jens, >> >> +/* >> + * Copy request information of the original request to the clone request. >> + */ >> +static void __blk_rq_prep_clone(struct request *dst, struct request *src) >> +{ >> + dst->cpu = src->cpu; >> + dst->cmd_flags = (rq_data_dir(src) | REQ_NOMERGE); >> + dst->cmd_type = src->cmd_type; >> + dst->__sector = blk_rq_pos(src); >> + dst->__data_len = blk_rq_bytes(src); >> + dst->nr_phys_segments = src->nr_phys_segments; >> + dst->ioprio = src->ioprio; >> + dst->buffer = src->buffer; >> + dst->cmd_len = src->cmd_len; >> + dst->cmd = src->cmd; > > Are you making sure that 'src' always exists while 'dst' is alive? Yes. Request-based dm is the owner of 'src' (original) and it never frees 'src' until the 'dst' (clone) are completed. I avoided deep-copying __cmd/buffer/sense as it's costly (additional allocation and memcpy). And I don't think there are any needs for that. But if anyone really wants that even with the copying cost, please speak up. Thanks, Kiyoshi Ueda -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel