diff options
Diffstat (limited to 'drivers/lightnvm/pblk-init.c')
-rw-r--r-- | drivers/lightnvm/pblk-init.c | 11 |
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 | ||
158 | static void pblk_rwb_free(struct pblk *pblk) | 161 | static void pblk_rwb_free(struct pblk *pblk) |