[SCSI] fusion - memory leak, and initializing fields
Changelog: (1) fix memory leak: p->phy_info (2) initialize device_info and port_info data fields (3) initialize the hba firmware handle (4) initialize phy_id for attached phy_info data fields (5) initialize attached phy_info data fields Signed-off-by: Eric Moore <Eric.Moore@lsil.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
52435430fc
commit
db9c9174e4
|
@ -749,6 +749,9 @@ mptsas_sas_io_unit_pg0(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info)
|
||||||
goto out_free_consistent;
|
goto out_free_consistent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (port_info->num_phys)
|
||||||
|
port_info->handle =
|
||||||
|
le16_to_cpu(buffer->PhyData[0].ControllerDevHandle);
|
||||||
for (i = 0; i < port_info->num_phys; i++) {
|
for (i = 0; i < port_info->num_phys; i++) {
|
||||||
mptsas_print_phy_data(&buffer->PhyData[i]);
|
mptsas_print_phy_data(&buffer->PhyData[i]);
|
||||||
port_info->phy_info[i].phy_id = i;
|
port_info->phy_info[i].phy_id = i;
|
||||||
|
@ -855,6 +858,7 @@ mptsas_sas_device_pg0(MPT_ADAPTER *ioc, struct mptsas_devinfo *device_info,
|
||||||
cfg.dir = 0; /* read */
|
cfg.dir = 0; /* read */
|
||||||
cfg.timeout = 10;
|
cfg.timeout = 10;
|
||||||
|
|
||||||
|
memset(device_info, 0, sizeof(struct mptsas_devinfo));
|
||||||
error = mpt_config(ioc, &cfg);
|
error = mpt_config(ioc, &cfg);
|
||||||
if (error)
|
if (error)
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -925,6 +929,7 @@ mptsas_sas_expander_pg0(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info,
|
||||||
cfg.dir = 0; /* read */
|
cfg.dir = 0; /* read */
|
||||||
cfg.timeout = 10;
|
cfg.timeout = 10;
|
||||||
|
|
||||||
|
memset(port_info, 0, sizeof(struct mptsas_portinfo));
|
||||||
error = mpt_config(ioc, &cfg);
|
error = mpt_config(ioc, &cfg);
|
||||||
if (error)
|
if (error)
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -1334,6 +1339,8 @@ mptsas_probe_expander_phys(MPT_ADAPTER *ioc, u32 *handle, int *index)
|
||||||
(MPI_SAS_DEVICE_PGAD_FORM_HANDLE <<
|
(MPI_SAS_DEVICE_PGAD_FORM_HANDLE <<
|
||||||
MPI_SAS_DEVICE_PGAD_FORM_SHIFT),
|
MPI_SAS_DEVICE_PGAD_FORM_SHIFT),
|
||||||
port_info->phy_info[i].attached.handle);
|
port_info->phy_info[i].attached.handle);
|
||||||
|
port_info->phy_info[i].attached.phy_id =
|
||||||
|
port_info->phy_info[i].phy_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1360,6 +1367,7 @@ mptsas_probe_expander_phys(MPT_ADAPTER *ioc, u32 *handle, int *index)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_free_port_info:
|
out_free_port_info:
|
||||||
|
kfree(port_info->phy_info);
|
||||||
kfree(port_info);
|
kfree(port_info);
|
||||||
out:
|
out:
|
||||||
return error;
|
return error;
|
||||||
|
@ -1485,6 +1493,7 @@ mptsas_hotplug_work(void *arg)
|
||||||
|
|
||||||
if (phy_info->rphy) {
|
if (phy_info->rphy) {
|
||||||
sas_rphy_delete(phy_info->rphy);
|
sas_rphy_delete(phy_info->rphy);
|
||||||
|
memset(&phy_info->attached, 0, sizeof(struct mptsas_devinfo));
|
||||||
phy_info->rphy = NULL;
|
phy_info->rphy = NULL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1955,6 +1964,8 @@ static void __devexit mptsas_remove(struct pci_dev *pdev)
|
||||||
mutex_lock(&ioc->sas_topology_mutex);
|
mutex_lock(&ioc->sas_topology_mutex);
|
||||||
list_for_each_entry_safe(p, n, &ioc->sas_topology, list) {
|
list_for_each_entry_safe(p, n, &ioc->sas_topology, list) {
|
||||||
list_del(&p->list);
|
list_del(&p->list);
|
||||||
|
if (p->phy_info)
|
||||||
|
kfree(p->phy_info);
|
||||||
kfree(p);
|
kfree(p);
|
||||||
}
|
}
|
||||||
mutex_unlock(&ioc->sas_topology_mutex);
|
mutex_unlock(&ioc->sas_topology_mutex);
|
||||||
|
|
Reference in New Issue