summaryrefslogtreecommitdiffstats
path: root/sys/dev/ciss/ciss.c
diff options
context:
space:
mode:
authorps <ps@FreeBSD.org>2006-04-19 19:56:10 +0000
committerps <ps@FreeBSD.org>2006-04-19 19:56:10 +0000
commit181e28126471c8f7b721972fb3e6278815273825 (patch)
treec51be318341be4717021f2981bf508e3243f73be /sys/dev/ciss/ciss.c
parentb3f3f05092e230c1d947e6a74913f8b147bc507e (diff)
downloadFreeBSD-src-181e28126471c8f7b721972fb3e6278815273825.zip
FreeBSD-src-181e28126471c8f7b721972fb3e6278815273825.tar.gz
Free some previously leaked memory on module unload.
Diffstat (limited to 'sys/dev/ciss/ciss.c')
-rw-r--r--sys/dev/ciss/ciss.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/dev/ciss/ciss.c b/sys/dev/ciss/ciss.c
index f062377..47dca32 100644
--- a/sys/dev/ciss/ciss.c
+++ b/sys/dev/ciss/ciss.c
@@ -1651,7 +1651,7 @@ static void
ciss_free(struct ciss_softc *sc)
{
struct ciss_request *cr;
- int i;
+ int i, j;
debug_called(1);
@@ -1725,8 +1725,15 @@ ciss_free(struct ciss_softc *sc)
cam_simq_free(sc->ciss_cam_devq);
if (sc->ciss_logical) {
- for (i = 0; i < sc->ciss_max_logical_bus; i++)
+ for (i = 0; i <= sc->ciss_max_logical_bus; i++) {
+ for (j = 0; j < CISS_MAX_LOGICAL; j++) {
+ if (sc->ciss_logical[i][j].cl_ldrive)
+ free(sc->ciss_logical[i][j].cl_ldrive, CISS_MALLOC_CLASS);
+ if (sc->ciss_logical[i][j].cl_lstatus)
+ free(sc->ciss_logical[i][j].cl_lstatus, CISS_MALLOC_CLASS);
+ }
free(sc->ciss_logical[i], CISS_MALLOC_CLASS);
+ }
free(sc->ciss_logical, CISS_MALLOC_CLASS);
}
OpenPOWER on IntegriCloud