aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lightnvm/pblk-init.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/lightnvm/pblk-init.c')
-rw-r--r--drivers/lightnvm/pblk-init.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c
index 44f9ec8d4c2a..fe501e6d45fc 100644
--- a/drivers/lightnvm/pblk-init.c
+++ b/drivers/lightnvm/pblk-init.c
@@ -127,10 +127,8 @@ static int pblk_l2p_recover(struct pblk *pblk, bool factory_init)
127 if (!line) { 127 if (!line) {
128 /* Configure next line for user data */ 128 /* Configure next line for user data */
129 line = pblk_line_get_first_data(pblk); 129 line = pblk_line_get_first_data(pblk);
130 if (!line) { 130 if (!line)
131 pr_err("pblk: line list corrupted\n");
132 return -EFAULT; 131 return -EFAULT;
133 }
134 } 132 }
135 133
136 return 0; 134 return 0;
@@ -141,6 +139,7 @@ static int pblk_l2p_init(struct pblk *pblk, bool factory_init)
141 sector_t i; 139 sector_t i;
142 struct ppa_addr ppa; 140 struct ppa_addr ppa;
143 size_t map_size; 141 size_t map_size;
142 int ret = 0;
144 143
145 map_size = pblk_trans_map_size(pblk); 144 map_size = pblk_trans_map_size(pblk);
146 pblk->trans_map = vmalloc(map_size); 145 pblk->trans_map = vmalloc(map_size);
@@ -152,7 +151,11 @@ static int pblk_l2p_init(struct pblk *pblk, bool factory_init)
152 for (i = 0; i < pblk->rl.nr_secs; i++) 151 for (i = 0; i < pblk->rl.nr_secs; i++)
153 pblk_trans_map_set(pblk, i, ppa); 152 pblk_trans_map_set(pblk, i, ppa);
154 153
155 return pblk_l2p_recover(pblk, factory_init); 154 ret = pblk_l2p_recover(pblk, factory_init);
155 if (ret)
156 vfree(pblk->trans_map);
157
158 return ret;
156} 159}
157 160
158static void pblk_rwb_free(struct pblk *pblk) 161static void pblk_rwb_free(struct pblk *pblk)