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 <[email protected]>
  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;
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to