提交 e29c80e6 编写于 作者: J Javier González 提交者: Jens Axboe

lightnvm: refactor target type lookup

Refactor target type lookup to use/not use locks explicitly instead of
using a hidden parameter to make the function locking.
Signed-off-by: NJavier González <javier@cnexlabs.com>
Signed-off-by: NMatias Bjørling <m@bjorling.me>
Signed-off-by: NJens Axboe <axboe@kernel.dk>
上级 fae7fae4
...@@ -220,21 +220,25 @@ static const struct block_device_operations nvm_fops = { ...@@ -220,21 +220,25 @@ static const struct block_device_operations nvm_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
}; };
static struct nvm_tgt_type *nvm_find_target_type(const char *name, int lock) static struct nvm_tgt_type *__nvm_find_target_type(const char *name)
{ {
struct nvm_tgt_type *tmp, *tt = NULL; struct nvm_tgt_type *tt;
if (lock) list_for_each_entry(tt, &nvm_tgt_types, list)
down_write(&nvm_tgtt_lock); if (!strcmp(name, tt->name))
return tt;
list_for_each_entry(tmp, &nvm_tgt_types, list) return NULL;
if (!strcmp(name, tmp->name)) { }
tt = tmp;
break; static struct nvm_tgt_type *nvm_find_target_type(const char *name)
} {
struct nvm_tgt_type *tt;
down_write(&nvm_tgtt_lock);
tt = __nvm_find_target_type(name);
up_write(&nvm_tgtt_lock);
if (lock)
up_write(&nvm_tgtt_lock);
return tt; return tt;
} }
...@@ -249,7 +253,7 @@ static int nvm_create_tgt(struct nvm_dev *dev, struct nvm_ioctl_create *create) ...@@ -249,7 +253,7 @@ static int nvm_create_tgt(struct nvm_dev *dev, struct nvm_ioctl_create *create)
void *targetdata; void *targetdata;
int ret; int ret;
tt = nvm_find_target_type(create->tgttype, 1); tt = nvm_find_target_type(create->tgttype);
if (!tt) { if (!tt) {
pr_err("nvm: target type %s not found\n", create->tgttype); pr_err("nvm: target type %s not found\n", create->tgttype);
return -EINVAL; return -EINVAL;
...@@ -523,7 +527,7 @@ int nvm_register_tgt_type(struct nvm_tgt_type *tt) ...@@ -523,7 +527,7 @@ int nvm_register_tgt_type(struct nvm_tgt_type *tt)
int ret = 0; int ret = 0;
down_write(&nvm_tgtt_lock); down_write(&nvm_tgtt_lock);
if (nvm_find_target_type(tt->name, 0)) if (__nvm_find_target_type(tt->name))
ret = -EEXIST; ret = -EEXIST;
else else
list_add(&tt->list, &nvm_tgt_types); list_add(&tt->list, &nvm_tgt_types);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册