Skip to content

Commit 0b8eb62

Browse files
cgxu519axboe
authored andcommitted
block: release bip in a right way in error path
Release bip using kfree() in error path when that was allocated by kmalloc(). Signed-off-by: Chengguang Xu <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> Acked-by: Martin K. Petersen <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
1 parent 3373a34 commit 0b8eb62

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

block/bio-integrity.c

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,18 @@ void blk_flush_integrity(void)
2424
flush_workqueue(kintegrityd_wq);
2525
}
2626

27+
void __bio_integrity_free(struct bio_set *bs, struct bio_integrity_payload *bip)
28+
{
29+
if (bs && mempool_initialized(&bs->bio_integrity_pool)) {
30+
if (bip->bip_vec)
31+
bvec_free(&bs->bvec_integrity_pool, bip->bip_vec,
32+
bip->bip_slab);
33+
mempool_free(bip, &bs->bio_integrity_pool);
34+
} else {
35+
kfree(bip);
36+
}
37+
}
38+
2739
/**
2840
* bio_integrity_alloc - Allocate integrity payload and attach it to bio
2941
* @bio: bio to attach integrity metadata to
@@ -78,7 +90,7 @@ struct bio_integrity_payload *bio_integrity_alloc(struct bio *bio,
7890

7991
return bip;
8092
err:
81-
mempool_free(bip, &bs->bio_integrity_pool);
93+
__bio_integrity_free(bs, bip);
8294
return ERR_PTR(-ENOMEM);
8395
}
8496
EXPORT_SYMBOL(bio_integrity_alloc);
@@ -99,14 +111,7 @@ void bio_integrity_free(struct bio *bio)
99111
kfree(page_address(bip->bip_vec->bv_page) +
100112
bip->bip_vec->bv_offset);
101113

102-
if (bs && mempool_initialized(&bs->bio_integrity_pool)) {
103-
bvec_free(&bs->bvec_integrity_pool, bip->bip_vec, bip->bip_slab);
104-
105-
mempool_free(bip, &bs->bio_integrity_pool);
106-
} else {
107-
kfree(bip);
108-
}
109-
114+
__bio_integrity_free(bs, bip);
110115
bio->bi_integrity = NULL;
111116
bio->bi_opf &= ~REQ_INTEGRITY;
112117
}

0 commit comments

Comments
 (0)