Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9e9432c2 authored by Chuck Ebbert's avatar Chuck Ebbert Committed by Jens Axboe
Browse files

block: fix bugs in bio-integrity mempool usage



Fix two bugs in the bio integrity code:

 use_bip_pool() always returns 0 because it checks against the wrong limit,
 causing the mempool to be used only when regular allocation fails.

 When the mempool is used as a fallback we don't free the data properly.

Signed-Off-By: default avatarChuck Ebbert <cebbert@redhat.com>
Acked-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>

Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent 1d616585
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ static inline unsigned int vecs_to_idx(unsigned int nr)

static inline int use_bip_pool(unsigned int idx)
{
	if (idx == BIOVEC_NR_POOLS)
	if (idx == BIOVEC_MAX_IDX)
		return 1;

	return 0;
@@ -95,6 +95,7 @@ struct bio_integrity_payload *bio_integrity_alloc_bioset(struct bio *bio,

	/* Use mempool if lower order alloc failed or max vecs were requested */
	if (bip == NULL) {
		idx = BIOVEC_MAX_IDX;  /* so we free the payload properly later */
		bip = mempool_alloc(bs->bio_integrity_pool, gfp_mask);

		if (unlikely(bip == NULL)) {