summaryrefslogtreecommitdiffstats
path: root/drivers/lightnvm
diff options
context:
space:
mode:
authorIgor Konopko <igor.j.konopko@intel.com>2018-06-01 16:41:08 +0200
committerJens Axboe <axboe@kernel.dk>2018-06-01 09:02:53 -0600
commitf142ac0b5d18547a9614a697f86820ee35fd7bf0 (patch)
treef801d30c4a6fe2b2dc0a3cdb419e495fab2f3f85 /drivers/lightnvm
parent6cf17a2f838db707dc8a69fe96f3565f2f4f61e6 (diff)
downloadlinux-f142ac0b5d18547a9614a697f86820ee35fd7bf0.tar.gz
linux-f142ac0b5d18547a9614a697f86820ee35fd7bf0.tar.bz2
linux-f142ac0b5d18547a9614a697f86820ee35fd7bf0.zip
lightnvm: proper error handling for pblk_bio_add_pages
Currently in case of error caused by bio_pc_add_page in pblk_bio_add_pages two issues occur when calling from pblk_rb_read_to_bio(). First one is in pblk_bio_free_pages, since we are trying to free pages not allocated from our mempool. Second one is the warn from dma_pool_free, that we are trying to free NULL pointer dma. This commit fix both issues. Signed-off-by: Igor Konopko <igor.j.konopko@intel.com> Signed-off-by: Marcin Dziegielewski <marcin.dziegielewski@intel.com> Signed-off-by: Matias Bjørling <mb@lightnvm.io> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/lightnvm')
-rw-r--r--drivers/lightnvm/pblk-core.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c
index 549341b24e3c..99036befb571 100644
--- a/drivers/lightnvm/pblk-core.c
+++ b/drivers/lightnvm/pblk-core.c
@@ -278,7 +278,9 @@ void pblk_free_rqd(struct pblk *pblk, struct nvm_rq *rqd, int type)
return;
}
- nvm_dev_dma_free(dev->parent, rqd->meta_list, rqd->dma_meta_list);
+ if (rqd->meta_list)
+ nvm_dev_dma_free(dev->parent, rqd->meta_list,
+ rqd->dma_meta_list);
mempool_free(rqd, pool);
}
@@ -316,7 +318,7 @@ int pblk_bio_add_pages(struct pblk *pblk, struct bio *bio, gfp_t flags,
return 0;
err:
- pblk_bio_free_pages(pblk, bio, 0, i - 1);
+ pblk_bio_free_pages(pblk, bio, (bio->bi_vcnt - i), i);
return -1;
}