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-head
mailing list