On 4/26/23 01:23, Chaitanya Kulkarni wrote: > >>>> [<ffffffff86f646ab>] __kmalloc+0x4b/0x190 >>>> [<ffffffffc09fb710>] >>>> nvme_ctrl_dhchap_secret_store+0x110/0x350 [nvme_core] >>>> [<ffffffff873cc848>] kernfs_fop_write_iter+0x358/0x530 >>>> [<ffffffff871b47d2>] vfs_write+0x802/0xc60 >>>> [<ffffffff871b5479>] ksys_write+0xf9/0x1d0 >>>> [<ffffffff88ba8f9c>] do_syscall_64+0x5c/0x90 >>>> [<ffffffff88c000aa>] entry_SYSCALL_64_after_hwframe+0x72/0xdc > > can you check if following fixes your problem for dhchap ? > > > linux-block (for-next) # git diff > diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c > index 1bfd52eae2ee..0e22d048de3c 100644 > --- a/drivers/nvme/host/core.c > +++ b/drivers/nvme/host/core.c > @@ -3825,8 +3825,10 @@ static ssize_t > nvme_ctrl_dhchap_secret_store(struct device *dev, > int ret; > > ret = nvme_auth_generate_key(dhchap_secret, &key); > - if (ret) > + if (ret) { > + kfree(dhchap_secret); > return ret; > + } > kfree(opts->dhchap_secret); > opts->dhchap_secret = dhchap_secret; > host_key = ctrl->host_key; > @@ -3879,8 +3881,10 @@ static ssize_t > nvme_ctrl_dhchap_ctrl_secret_store(struct device *dev, > int ret; > > ret = nvme_auth_generate_key(dhchap_secret, &key); > - if (ret) > + if (ret) { > + kfree(dhchap_secret); > return ret; > + } > kfree(opts->dhchap_ctrl_secret); > opts->dhchap_ctrl_secret = dhchap_secret; > ctrl_key = ctrl->ctrl_key; > > -ck > > sorry my forget to add ida changes, plz ignore earlier and try this :- linux-block (for-next) # git diff diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 1bfd52eae2ee..bb376cc6a5a3 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -3825,8 +3825,10 @@ static ssize_t nvme_ctrl_dhchap_secret_store(struct device *dev, int ret; ret = nvme_auth_generate_key(dhchap_secret, &key); - if (ret) + if (ret) { + kfree(dhchap_secret); return ret; + } kfree(opts->dhchap_secret); opts->dhchap_secret = dhchap_secret; host_key = ctrl->host_key; @@ -3879,8 +3881,10 @@ static ssize_t nvme_ctrl_dhchap_ctrl_secret_store(struct device *dev, int ret; ret = nvme_auth_generate_key(dhchap_secret, &key); - if (ret) + if (ret) { + kfree(dhchap_secret); return ret; + } kfree(opts->dhchap_ctrl_secret); opts->dhchap_ctrl_secret = dhchap_secret; ctrl_key = ctrl->ctrl_key; @@ -4042,8 +4046,10 @@ int nvme_cdev_add(struct cdev *cdev, struct device *cdev_device, cdev_init(cdev, fops); cdev->owner = owner; ret = cdev_device_add(cdev, cdev_device); - if (ret) + if (ret) { put_device(cdev_device); + ida_free(&nvme_ns_chr_minor_ida, MINOR(cdev_device->devt)); + } return ret; } with above patch I was able to get this :- blktests (master) # ./check nvme/044 nvme/044 (Test bi-directional authentication) [passed] runtime 1.729s ... 1.892s blktests (master) # ./check nvme/045 nvme/045 (Test re-authentication) [passed] runtime 4.798s ... 6.303s -ck