DF-1620 / fix.diff
diff --git a/sys/dev/raid/mrsas/mrsas_cam.c b/sys/dev/raid/mrsas/mrsas_cam.c --- a/sys/dev/raid/mrsas/mrsas_cam.c +++ b/sys/dev/raid/mrsas/mrsas_cam.c @@ -481,6 +481,7 @@ req_desc = mrsas_get_request_desc(sc, (cmd->index)-1); if (!req_desc) { device_printf(sc->mrsas_dev, "Cannot get request_descriptor.\n"); + mrsas_release_mpt_cmd(cmd); return (FAIL); } memset(req_desc, 0, sizeof(MRSAS_REQUEST_DESCRIPTOR_UNION)); @@ -495,6 +496,7 @@ if (mrsas_ldio_inq(sim, ccb)) { if (mrsas_build_ldio(sc, cmd, ccb)){ device_printf(sc->mrsas_dev, "Build LDIO failed.\n"); + mrsas_release_mpt_cmd(cmd); lockmgr(&sc->raidmap_lock, LK_RELEASE); return(1); } @@ -502,6 +504,7 @@ else { if (mrsas_build_dcdb(sc, cmd, ccb, sim)) { device_printf(sc->mrsas_dev, "Build DCDB failed.\n"); + mrsas_release_mpt_cmd(cmd); lockmgr(&sc->raidmap_lock, LK_RELEASE); return(1); } |