Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 9 Oct 2013 18:45:42 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r256214 - stable/9/sys/cam/ctl
Message-ID:  <201310091845.r99IjgAM054300@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Wed Oct  9 18:45:42 2013
New Revision: 256214
URL: http://svnweb.freebsd.org/changeset/base/256214

Log:
  MFC r249256 (by ken):
  Fix a memory leak that showed up when we delete LUNs.  The memory used for
  the LUN was never freed.
  
  ctl.c:          Adjust ctl_alloc_lun() to make sure we don't clear the
                  CTL_LUN_MALLOCED flag.

Modified:
  stable/9/sys/cam/ctl/ctl.c
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/cam/ctl/ctl.c
==============================================================================
--- stable/9/sys/cam/ctl/ctl.c	Wed Oct  9 18:45:01 2013	(r256213)
+++ stable/9/sys/cam/ctl/ctl.c	Wed Oct  9 18:45:42 2013	(r256214)
@@ -4217,7 +4217,7 @@ ctl_alloc_lun(struct ctl_softc *ctl_soft
 {
 	struct ctl_lun *nlun, *lun;
 	struct ctl_frontend *fe;
-	int lun_number, i;
+	int lun_number, i, lun_malloced;
 
 	if (be_lun == NULL)
 		return (EINVAL);
@@ -4239,11 +4239,15 @@ ctl_alloc_lun(struct ctl_softc *ctl_soft
 	}
 	if (ctl_lun == NULL) {
 		lun = malloc(sizeof(*lun), M_CTL, M_WAITOK);
-		lun->flags = CTL_LUN_MALLOCED;
-	} else
+		lun_malloced = 1;
+	} else {
+		lun_malloced = 0;
 		lun = ctl_lun;
+	}
 
 	memset(lun, 0, sizeof(*lun));
+	if (lun_malloced)
+		lun->flags = CTL_LUN_MALLOCED;
 
 	mtx_lock(&ctl_softc->ctl_lock);
 	/*
@@ -4295,7 +4299,7 @@ ctl_alloc_lun(struct ctl_softc *ctl_soft
 	 * The processor LUN is always enabled.  Disk LUNs come on line
 	 * disabled, and must be enabled by the backend.
 	 */
-	lun->flags = CTL_LUN_DISABLED;
+	lun->flags |= CTL_LUN_DISABLED;
 	lun->backend = be_lun->be;
 	be_lun->ctl_lun = lun;
 	be_lun->lun_id = lun_number;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310091845.r99IjgAM054300>