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
This commit is contained in:
parent
5932be6069
commit
3b1d7ef89c
@ -4223,7 +4223,7 @@ ctl_alloc_lun(struct ctl_softc *ctl_softc, struct ctl_lun *ctl_lun,
|
||||
{
|
||||
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_softc, struct ctl_lun *ctl_lun,
|
||||
}
|
||||
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_softc, struct ctl_lun *ctl_lun,
|
||||
* 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;
|
||||
|
Loading…
Reference in New Issue
Block a user