On Wed, May 09, 2012 at 11:08:34PM -0400, Kent Overstreet wrote: > When you allocate a bio from a bio pool, to free it you have to know > where it came from; this adds a flag which, if set, means bi_destructor > is the pointer to the pool and bio_put() can do the right thing. > > This is used in bcache, so we can cleanly use per device bio pools. > > Signed-off-by: Kent Overstreet <koverstreet@xxxxxxxxxx> > --- > @@ -417,7 +418,11 @@ void bio_put(struct bio *bio) > */ > if (atomic_dec_and_test(&bio->bi_cnt)) { > bio->bi_next = NULL; > - bio->bi_destructor(bio); > + > + if (bio_flagged(bio, BIO_HAS_POOL)) > + bio_free(bio, (void *) bio->bi_destructor); > + else > + bio->bi_destructor(bio); Ummm... this is way too cryptic. Please just add another field to bio. Thanks. -- tejun -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel