aboutsummaryrefslogtreecommitdiff
path: root/drivers/lightnvm
diff options
context:
space:
mode:
authorWenwei Tao <ww.tao0320@gmail.com>2016-01-12 07:49:18 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-09-15 08:27:40 +0200
commitd239b53a14bb9bbe6fa45405af6fa0d86f68a874 (patch)
tree4b747944e6355fa85780b17aa28176617af5c466 /drivers/lightnvm
parentd3f89f3a91dfa4758fdd6e98b780095d2de66943 (diff)
lightnvm: unlock rq and free ppa_list on submission fail
[ Upstream commit c27278bddd75a3ee755c8e83c6bcc3fdd7271ef6 ] When rrpc_write_ppalist_rq and rrpc_read_ppalist_rq succeed, we setup rq correctly, but nvm_submit_io may afterward fail since it cannot allocate request or nvme_nvm_command, we return error but forget to cleanup the previous work. Signed-off-by: Wenwei Tao <ww.tao0320@gmail.com> Signed-off-by: Matias Bjørling <m@bjorling.me> Signed-off-by: Jens Axboe <axboe@fb.com> Signed-off-by: Sasha Levin <alexander.levin@verizon.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/lightnvm')
-rw-r--r--drivers/lightnvm/rrpc.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c
index f4bc98687d7f..748cab499580 100644
--- a/drivers/lightnvm/rrpc.c
+++ b/drivers/lightnvm/rrpc.c
@@ -845,6 +845,12 @@ static int rrpc_submit_io(struct rrpc *rrpc, struct bio *bio,
if (err) {
pr_err("rrpc: I/O submission failed: %d\n", err);
bio_put(bio);
+ if (!(flags & NVM_IOTYPE_GC)) {
+ rrpc_unlock_rq(rrpc, rqd);
+ if (rqd->nr_pages > 1)
+ nvm_dev_dma_free(rrpc->dev,
+ rqd->ppa_list, rqd->dma_ppa_list);
+ }
return NVM_IO_ERR;
}