aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lightnvm/core.c
diff options
context:
space:
mode:
authorWenwei Tao <ww.tao0320@gmail.com>2016-03-03 09:06:38 -0500
committerJens Axboe <axboe@fb.com>2016-03-18 21:10:38 -0400
commitda1e284919b0b99c5bf0618b6c98cbaf2c17e62e (patch)
treeef1d8fe8821376dd57fbd4d3319a747841df38e6 /drivers/lightnvm/core.c
parent4c9dacb82d5aa36aa2568df60d897f2eb3d8819b (diff)
lightnvm: add a bitmap of luns
Add a bitmap of luns to indicate the status of luns: inuse/available. When create targets do the necessary check to avoid allocating luns that are already allocated. Signed-off-by: Wenwei Tao <ww.tao0320@gmail.com> Freed dev->lun_map if nvm_core_init later failed in the init process. Signed-off-by: Matias Bjørling <m@bjorling.me> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'drivers/lightnvm/core.c')
-rw-r--r--drivers/lightnvm/core.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c
index 2925fd0b82bb..0dc9a80adb94 100644
--- a/drivers/lightnvm/core.c
+++ b/drivers/lightnvm/core.c
@@ -464,6 +464,10 @@ static int nvm_core_init(struct nvm_dev *dev)
464 dev->nr_luns = dev->luns_per_chnl * dev->nr_chnls; 464 dev->nr_luns = dev->luns_per_chnl * dev->nr_chnls;
465 465
466 dev->total_secs = dev->nr_luns * dev->sec_per_lun; 466 dev->total_secs = dev->nr_luns * dev->sec_per_lun;
467 dev->lun_map = kcalloc(BITS_TO_LONGS(dev->nr_luns),
468 sizeof(unsigned long), GFP_KERNEL);
469 if (!dev->lun_map)
470 return -ENOMEM;
467 INIT_LIST_HEAD(&dev->online_targets); 471 INIT_LIST_HEAD(&dev->online_targets);
468 mutex_init(&dev->mlock); 472 mutex_init(&dev->mlock);
469 spin_lock_init(&dev->lock); 473 spin_lock_init(&dev->lock);
@@ -586,6 +590,7 @@ int nvm_register(struct request_queue *q, char *disk_name,
586 590
587 return 0; 591 return 0;
588err_init: 592err_init:
593 kfree(dev->lun_map);
589 kfree(dev); 594 kfree(dev);
590 return ret; 595 return ret;
591} 596}
@@ -608,6 +613,7 @@ void nvm_unregister(char *disk_name)
608 up_write(&nvm_lock); 613 up_write(&nvm_lock);
609 614
610 nvm_exit(dev); 615 nvm_exit(dev);
616 kfree(dev->lun_map);
611 kfree(dev); 617 kfree(dev);
612} 618}
613EXPORT_SYMBOL(nvm_unregister); 619EXPORT_SYMBOL(nvm_unregister);