On Mon, Aug 19, 2019 at 08:59:13AM +0800, Pan Bian wrote: > The function kmalloc rather than mempool_alloc is called to allocate > memory when the memory pool is unavailable. However, mempool_alloc is > used to release the memory chunck in both cases when error occurs. This > patch fixes the bug. > > Fixes: 9f060e2231c ("block: Convert integrity to bvec_alloc_bs()") > Signed-off-by: Pan Bian <bianpan2016@xxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > --- > V2: add Fixes and CC tags > --- > block/bio-integrity.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/block/bio-integrity.c b/block/bio-integrity.c > index fb95dbb..011dfc8 100644 > --- a/block/bio-integrity.c > +++ b/block/bio-integrity.c > @@ -75,7 +75,10 @@ struct bio_integrity_payload *bio_integrity_alloc(struct bio *bio, > > return bip; > err: > - mempool_free(bip, &bs->bio_integrity_pool); > + if (!bs || !mempool_initialized(&bs->bio_integrity_pool)) > + kfree(bip); > + else > + mempool_free(bip, &bs->bio_integrity_pool); > return ERR_PTR(-ENOMEM); > } > EXPORT_SYMBOL(bio_integrity_alloc); 'err' is still reached in case that 'bs' is valid, so fix nothing. Thanks, Ming