On 05/24/12 09:39, Kent Overstreet wrote: > On Thu, May 24, 2012 at 09:19:12AM +0900, Jun'ichi Nomura wrote: >> The destructor may also be called from blk_rq_unprep_clone(), >> which just puts bio. >> So this patch will introduce a memory leak. > > Well, keeping around bi_destructor solely for that reason would be > pretty lousy. Can you come up with a better solution? I don't have good one but here are some ideas: a) Do bio_endio() rather than bio_put() in blk_rq_unprep_clone() and let bi_end_io reap additional data. It looks ugly. b) Separate the constructor from blk_rq_prep_clone(). dm has to do rq_for_each_bio loop again for constructor. Possible performance impact. c) Open code blk_rq_prep/unprep_clone() in dm. It exposes unnecessary block-internals to dm. d) Pass destructor function to blk_rq_prep/unprep_clone() for them to callback. Umm, is "d)" better? -- Jun'ichi Nomura, NEC Corporation -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel