diff --git a/block/bio-integrity.c b/block/bio-integrity.c index 2e22a3f7466a86b75c542dd55e6b23d0b4e73c58..f6f94ba56a82ef14b4c7e9d87661bc33bff9388d 100644 --- a/block/bio-integrity.c +++ b/block/bio-integrity.c @@ -114,7 +114,7 @@ EXPORT_SYMBOL(bio_integrity_alloc); * Description: Used to free the integrity portion of a bio. Usually * called from bio_free(). */ -static void bio_integrity_free(struct bio *bio) +void bio_integrity_free(struct bio *bio) { struct bio_integrity_payload *bip = bio_integrity(bio); struct bio_set *bs = bio->bi_pool; diff --git a/block/bio.c b/block/bio.c index 06193e854577e1ecff96d66b4f382084ceedd2a5..df7cecce02789fb5c8fbeafc64fd22bb65131efe 100644 --- a/block/bio.c +++ b/block/bio.c @@ -245,6 +245,9 @@ struct bio_vec *bvec_alloc(gfp_t gfp_mask, int nr, unsigned long *idx, void bio_uninit(struct bio *bio) { bio_disassociate_task(bio); + + if (bio_integrity(bio)) + bio_integrity_free(bio); } EXPORT_SYMBOL(bio_uninit); diff --git a/block/blk.h b/block/blk.h index 965e9c507654e0dac626289eabffb883e20b16f1..6d188b275fe9c049b4e0d174d06769be8bf93a7f 100644 --- a/block/blk.h +++ b/block/blk.h @@ -178,6 +178,7 @@ static inline void blk_queue_enter_live(struct request_queue *q) #ifdef CONFIG_BLK_DEV_INTEGRITY void blk_flush_integrity(void); bool __bio_integrity_endio(struct bio *); +void bio_integrity_free(struct bio *bio); static inline bool bio_integrity_endio(struct bio *bio) { if (bio_integrity(bio)) @@ -192,6 +193,9 @@ static inline bool bio_integrity_endio(struct bio *bio) { return true; } +static inline void bio_integrity_free(struct bio *bio) +{ +} #endif void blk_timeout_work(struct work_struct *work);