Okay, I will rebase it on for-4.8/core. 2016-05-19 20:42 GMT+08:00 Matias Bjørling <mb@xxxxxxxxxxx>: > On 05/19/2016 08:38 AM, Wenwei Tao wrote: >> >> From: Wenwei Tao <ww.tao0320@xxxxxxxxx> >> >> When create a target, we check whether the target is >> already exist first. If the answer is no, we release >> the lock and continue the creation. This cannot prevent >> concurrent creation of the same target, so hold the lock >> until finish the target creation. >> >> Signed-off-by: Wenwei Tao <ww.tao0320@xxxxxxxxx> >> --- >> drivers/lightnvm/core.c | 18 +++++++++--------- >> 1 file changed, 9 insertions(+), 9 deletions(-) >> >> diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c >> index 160c1a6..a622081 100644 >> --- a/drivers/lightnvm/core.c >> +++ b/drivers/lightnvm/core.c >> @@ -791,6 +791,7 @@ static int nvm_create_target(struct nvm_dev *dev, >> struct nvm_tgt_type *tt; >> struct nvm_target *t; >> void *targetdata; >> + int ret = -ENOMEM; >> >> if (!dev->mt) { >> pr_info("nvm: device has no media manager registered.\n"); >> @@ -801,21 +802,20 @@ static int nvm_create_target(struct nvm_dev *dev, >> tt = nvm_find_target_type(create->tgttype); >> if (!tt) { >> pr_err("nvm: target type %s not found\n", >> create->tgttype); >> - up_write(&nvm_lock); >> - return -EINVAL; >> + ret = -EINVAL; >> + goto err_unlock; >> } >> >> t = nvm_find_target(create->tgtname); >> if (t) { >> pr_err("nvm: target name already exists.\n"); >> - up_write(&nvm_lock); >> - return -EINVAL; >> + ret = -EINVAL; >> + goto err_unlock; >> } >> - up_write(&nvm_lock); >> >> t = kmalloc(sizeof(struct nvm_target), GFP_KERNEL); >> if (!t) >> - return -ENOMEM; >> + goto err_unlock; >> >> tqueue = blk_alloc_queue_node(GFP_KERNEL, dev->q->node); >> if (!tqueue) >> @@ -848,8 +848,6 @@ static int nvm_create_target(struct nvm_dev *dev, >> t->type = tt; >> t->disk = tdisk; >> t->dev = dev; >> - >> - down_write(&nvm_lock); >> list_add_tail(&t->list, &nvm_targets); >> up_write(&nvm_lock); >> >> @@ -860,7 +858,9 @@ err_queue: >> blk_cleanup_queue(tqueue); >> err_t: >> kfree(t); >> - return -ENOMEM; >> +err_unlock: >> + up_write(&nvm_lock); >> + return ret; >> } >> >> static int __nvm_configure_create(struct nvm_ioctl_create *create) >> > > Thanks. There is a couple of patches in the for-4.8/core that moves this > logic to the gennvm media manager. Could you rebase this on top? -- To unsubscribe from this list: send the line "unsubscribe linux-block" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html