svn commit: r249256 - head/sys/cam/ctl

Kenneth D. Merry ken at FreeBSD.org
Mon Apr 8 15:36:27 UTC 2013


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 at 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;


More information about the svn-src-all mailing list