[dm-devel] [Bcache v13 02/16] Bio pool freeing
Tejun Heo
tejun at google.com
Tue May 15 16:24:00 UTC 2012
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 at google.com>
> ---
> @@ -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
More information about the dm-devel
mailing list