Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 8 Apr 2013 15:36:26 +0000 (UTC)
From:      "Kenneth D. Merry" <ken@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r249256 - head/sys/cam/ctl
Message-ID:  <201304081536.r38FaQfW021181@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ken
Date: Mon Apr  8 15:36:26 2013
New Revision: 249256
URL: http://svnweb.freebsd.org/changeset/base/249256

Log:
  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.
  
  Reported by:	Sreenivasa Honnur <shonnur@chelsio.com>
  Sponsored by:	Spectra Logic
  MFC after:	3 days

Modified:
  head/sys/cam/ctl/ctl.c

Modified: head/sys/cam/ctl/ctl.c
==============================================================================
--- head/sys/cam/ctl/ctl.c	Mon Apr  8 15:13:15 2013	(r249255)
+++ head/sys/cam/ctl/ctl.c	Mon Apr  8 15:36:26 2013	(r249256)
@@ -4223,7 +4223,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);
@@ -4245,11 +4245,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);
 	/*
@@ -4301,7 +4305,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?201304081536.r38FaQfW021181>