void bio_free(struct bio *bio, struct bio_set *bs) { void *p; if (bio_has_allocated_vec(bio)) bvec_free_bs(bs, bio->bi_io_vec, BIO_POOL_IDX(bio)); if (bio_integrity(bio)) bio_integrity_free(bio, bs); p = bio; if (bs->front_pad) p -= bs->front_pad; mempool_free(p, bs->bio_pool); }
void bio_free(struct bio *bio, struct bio_set *bs) { void *p; if (bio_has_allocated_vec(bio)) bvec_free_bs(bs, bio->bi_io_vec, BIO_POOL_IDX(bio)); if (bio_integrity(bio)) bio_integrity_free(bio, bs); /* * If we have front padding, adjust the bio pointer before freeing */ p = bio; if (bs->front_pad) p -= bs->front_pad; mempool_free(p, bs->bio_pool); }
static void bio_free(struct bio *bio) { struct bio_set *bs = bio->bi_pool; void *p; __bio_free(bio); if (bs) { if (bio_has_allocated_vec(bio)) bvec_free_bs(bs, bio->bi_io_vec, BIO_POOL_IDX(bio)); /* * If we have front padding, adjust the bio pointer before freeing */ p = bio; p -= bs->front_pad; mempool_free(p, bs->bio_pool); } else { /* Bio was allocated by bio_kmalloc() */ kfree(bio); } }
static void bio_kmalloc_destructor(struct bio *bio) { if (bio_has_allocated_vec(bio)) kfree(bio->bi_io_vec); kfree(bio); }