diff options
author | Wenwei Tao <ww.tao0320@gmail.com> | 2015-11-28 10:49:23 -0500 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2015-11-29 16:34:57 -0500 |
commit | 8261bd48c6c9c36cd2c2e343a69e76a3be2b04a4 (patch) | |
tree | bc7135d65b0093ac658f0396f8391b95282d7919 /drivers | |
parent | c4699e70d1db14119708dae76dac7c43e1e12988 (diff) |
lightnvm: free memory when gennvm register fails
free allocated nvm block and gennvm lun structures when
gennvm register fails, otherwise it will cause memory leak.
Signed-off-by: Matias Bjørling <m@bjorling.me>
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/lightnvm/gennvm.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/lightnvm/gennvm.c b/drivers/lightnvm/gennvm.c index e20e74ec6b91..3969a9875e59 100644 --- a/drivers/lightnvm/gennvm.c +++ b/drivers/lightnvm/gennvm.c | |||
@@ -207,6 +207,14 @@ static int gennvm_blocks_init(struct nvm_dev *dev, struct gen_nvm *gn) | |||
207 | return 0; | 207 | return 0; |
208 | } | 208 | } |
209 | 209 | ||
210 | static void gennvm_free(struct nvm_dev *dev) | ||
211 | { | ||
212 | gennvm_blocks_free(dev); | ||
213 | gennvm_luns_free(dev); | ||
214 | kfree(dev->mp); | ||
215 | dev->mp = NULL; | ||
216 | } | ||
217 | |||
210 | static int gennvm_register(struct nvm_dev *dev) | 218 | static int gennvm_register(struct nvm_dev *dev) |
211 | { | 219 | { |
212 | struct gen_nvm *gn; | 220 | struct gen_nvm *gn; |
@@ -234,16 +242,13 @@ static int gennvm_register(struct nvm_dev *dev) | |||
234 | 242 | ||
235 | return 1; | 243 | return 1; |
236 | err: | 244 | err: |
237 | kfree(gn); | 245 | gennvm_free(dev); |
238 | return ret; | 246 | return ret; |
239 | } | 247 | } |
240 | 248 | ||
241 | static void gennvm_unregister(struct nvm_dev *dev) | 249 | static void gennvm_unregister(struct nvm_dev *dev) |
242 | { | 250 | { |
243 | gennvm_blocks_free(dev); | 251 | gennvm_free(dev); |
244 | gennvm_luns_free(dev); | ||
245 | kfree(dev->mp); | ||
246 | dev->mp = NULL; | ||
247 | } | 252 | } |
248 | 253 | ||
249 | static struct nvm_block *gennvm_get_blk(struct nvm_dev *dev, | 254 | static struct nvm_block *gennvm_get_blk(struct nvm_dev *dev, |