diff options
author | Igor Konopko <igor.j.konopko@intel.com> | 2018-06-01 17:41:09 +0300 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2018-06-01 18:02:53 +0300 |
commit | fbadca7396b97d95e2390c97506358f4f9dce7c7 (patch) | |
tree | 9e84e0b90a50b2e2e357c2fbf1fd6dfebc727b99 | |
parent | f142ac0b5d18547a9614a697f86820ee35fd7bf0 (diff) | |
download | linux-fbadca7396b97d95e2390c97506358f4f9dce7c7.tar.xz |
lightnvm: fix partial read error path
When error occurs during bio_add_page on partial read path, pblk
tries to free pages twice.
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>
-rw-r--r-- | drivers/lightnvm/pblk-read.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/lightnvm/pblk-read.c b/drivers/lightnvm/pblk-read.c index 38f89a84ce5e..f770fd113ffe 100644 --- a/drivers/lightnvm/pblk-read.c +++ b/drivers/lightnvm/pblk-read.c @@ -256,7 +256,7 @@ static int pblk_partial_read_bio(struct pblk *pblk, struct nvm_rq *rqd, new_bio = bio_alloc(GFP_KERNEL, nr_holes); if (pblk_bio_add_pages(pblk, new_bio, GFP_KERNEL, nr_holes)) - goto err; + goto err_add_pages; if (nr_holes != new_bio->bi_vcnt) { pr_err("pblk: malformed bio\n"); @@ -347,10 +347,10 @@ static int pblk_partial_read_bio(struct pblk *pblk, struct nvm_rq *rqd, return NVM_IO_OK; err: - pr_err("pblk: failed to perform partial read\n"); - /* Free allocated pages in new bio */ - pblk_bio_free_pages(pblk, bio, 0, new_bio->bi_vcnt); + pblk_bio_free_pages(pblk, new_bio, 0, new_bio->bi_vcnt); +err_add_pages: + pr_err("pblk: failed to perform partial read\n"); __pblk_end_io_read(pblk, rqd, false); return NVM_IO_ERR; } |