diff options
author | Jim Harris <jimharris@FreeBSD.org> | 2013-10-08 16:01:43 +0000 |
---|---|---|
committer | Jim Harris <jimharris@FreeBSD.org> | 2013-10-08 16:01:43 +0000 |
commit | 7aa27dbac5b6e6bb11ae3a4d961f79b28bf3a046 (patch) | |
tree | bb36d8df8f0e13b7b721714f70801ff335e2b01f /sys/dev/nvme | |
parent | bb2f67fd725a8f756d933644f43ac908a1810a20 (diff) | |
download | src-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.c | 12 |
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); |