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>
This commit is contained in:
@@ -464,6 +464,10 @@ static int nvm_core_init(struct nvm_dev *dev)
|
||||
dev->nr_luns = dev->luns_per_chnl * dev->nr_chnls;
|
||||
|
||||
dev->total_secs = dev->nr_luns * dev->sec_per_lun;
|
||||
dev->lun_map = kcalloc(BITS_TO_LONGS(dev->nr_luns),
|
||||
sizeof(unsigned long), GFP_KERNEL);
|
||||
if (!dev->lun_map)
|
||||
return -ENOMEM;
|
||||
INIT_LIST_HEAD(&dev->online_targets);
|
||||
mutex_init(&dev->mlock);
|
||||
spin_lock_init(&dev->lock);
|
||||
@@ -586,6 +590,7 @@ int nvm_register(struct request_queue *q, char *disk_name,
|
||||
|
||||
return 0;
|
||||
err_init:
|
||||
kfree(dev->lun_map);
|
||||
kfree(dev);
|
||||
return ret;
|
||||
}
|
||||
@@ -608,6 +613,7 @@ void nvm_unregister(char *disk_name)
|
||||
up_write(&nvm_lock);
|
||||
|
||||
nvm_exit(dev);
|
||||
kfree(dev->lun_map);
|
||||
kfree(dev);
|
||||
}
|
||||
EXPORT_SYMBOL(nvm_unregister);
|
||||
|
Reference in New Issue
Block a user