aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/nvme
diff options
context:
space:
mode:
authorJim Harris <jimharris@FreeBSD.org>2013-10-08 16:01:43 +0000
committerJim Harris <jimharris@FreeBSD.org>2013-10-08 16:01:43 +0000
commit7aa27dbac5b6e6bb11ae3a4d961f79b28bf3a046 (patch)
treebb36d8df8f0e13b7b721714f70801ff335e2b01f /sys/dev/nvme
parentbb2f67fd725a8f756d933644f43ac908a1810a20 (diff)
downloadsrc-7aa27dbac5b6e6bb11ae3a4d961f79b28bf3a046.tar.gz
src-7aa27dbac5b6e6bb11ae3a4d961f79b28bf3a046.zip
Do not leak resources during attach if nvme_ctrlr_construct() or the initial
controller resets fail. Sponsored by: Intel Reviewed by: carl Approved by: re (hrs) MFC after: 1 week
Notes
Notes: svn path=/head/; revision=256155
Diffstat (limited to 'sys/dev/nvme')
-rw-r--r--sys/dev/nvme/nvme.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/dev/nvme/nvme.c b/sys/dev/nvme/nvme.c
index ec8d592349c9..81c90871bc82 100644
--- a/sys/dev/nvme/nvme.c
+++ b/sys/dev/nvme/nvme.c
@@ -221,8 +221,10 @@ nvme_attach(device_t dev)
status = nvme_ctrlr_construct(ctrlr, dev);
- if (status != 0)
+ if (status != 0) {
+ nvme_ctrlr_destruct(ctrlr, dev);
return (status);
+ }
/*
* Reset controller twice to ensure we do a transition from cc.en==1
@@ -230,12 +232,16 @@ nvme_attach(device_t dev)
* the controller was left in when boot handed off to OS.
*/
status = nvme_ctrlr_hw_reset(ctrlr);
- if (status != 0)
+ if (status != 0) {
+ nvme_ctrlr_destruct(ctrlr, dev);
return (status);
+ }
status = nvme_ctrlr_hw_reset(ctrlr);
- if (status != 0)
+ if (status != 0) {
+ nvme_ctrlr_destruct(ctrlr, dev);
return (status);
+ }
nvme_sysctl_initialize_ctrlr(ctrlr);