diff options
author | Igor Konopko <igor.j.konopko@intel.com> | 2018-06-01 10:41:08 -0400 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2018-06-01 11:02:53 -0400 |
commit | f142ac0b5d18547a9614a697f86820ee35fd7bf0 (patch) | |
tree | f801d30c4a6fe2b2dc0a3cdb419e495fab2f3f85 /drivers/lightnvm | |
parent | 6cf17a2f838db707dc8a69fe96f3565f2f4f61e6 (diff) |
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.c | 6 |
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) | |||
278 | return; | 278 | return; |
279 | } | 279 | } |
280 | 280 | ||
281 | nvm_dev_dma_free(dev->parent, rqd->meta_list, rqd->dma_meta_list); | 281 | if (rqd->meta_list) |
282 | nvm_dev_dma_free(dev->parent, rqd->meta_list, | ||
283 | rqd->dma_meta_list); | ||
282 | mempool_free(rqd, pool); | 284 | mempool_free(rqd, pool); |
283 | } | 285 | } |
284 | 286 | ||
@@ -316,7 +318,7 @@ int pblk_bio_add_pages(struct pblk *pblk, struct bio *bio, gfp_t flags, | |||
316 | 318 | ||
317 | return 0; | 319 | return 0; |
318 | err: | 320 | err: |
319 | pblk_bio_free_pages(pblk, bio, 0, i - 1); | 321 | pblk_bio_free_pages(pblk, bio, (bio->bi_vcnt - i), i); |
320 | return -1; | 322 | return -1; |
321 | } | 323 | } |
322 | 324 | ||