Module Name: src Committed By: christos Date: Tue Feb 27 12:59:54 UTC 2018
Modified Files: src/sys/dev/ic: nvme.c Log Message: - don't leak ccb on alloc failure. - KASSERT to prevent memory leak. To generate a diff of this commit: cvs rdiff -u -r1.31 -r1.32 src/sys/dev/ic/nvme.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/ic/nvme.c diff -u src/sys/dev/ic/nvme.c:1.31 src/sys/dev/ic/nvme.c:1.32 --- src/sys/dev/ic/nvme.c:1.31 Sat Oct 28 00:53:55 2017 +++ src/sys/dev/ic/nvme.c Tue Feb 27 07:59:53 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: nvme.c,v 1.31 2017/10/28 04:53:55 riastradh Exp $ */ +/* $NetBSD: nvme.c,v 1.32 2018/02/27 12:59:53 christos Exp $ */ /* $OpenBSD: nvme.c,v 1.49 2016/04/18 05:59:50 dlg Exp $ */ /* @@ -18,7 +18,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nvme.c,v 1.31 2017/10/28 04:53:55 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nvme.c,v 1.32 2018/02/27 12:59:53 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -570,8 +570,10 @@ nvme_ns_identify(struct nvme_softc *sc, KASSERT(ccb != NULL); /* it's a bug if we don't have spare ccb here */ mem = nvme_dmamem_alloc(sc, sizeof(*identify)); - if (mem == NULL) + if (mem == NULL) { + nvme_ccb_put(sc->sc_admin_q, ccb); return ENOMEM; + } memset(&sqe, 0, sizeof(sqe)); sqe.opcode = NVM_ADMIN_IDENTIFY; @@ -601,6 +603,7 @@ nvme_ns_identify(struct nvme_softc *sc, ns = nvme_ns_get(sc, nsid); KASSERT(ns); + KASSERT(ns->ident == NULL); ns->ident = identify; done: