[SCSI] qla2xxx: Add qla2x00_free_fcports() function
This function was added to encapsulate freeing the memory for all the fcports associated with a particular vha. Also added a call to qla2x00_free_fcports() to qla2x00_free_device() to free the memory for all the fcports associated with a vha during device removal. Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
Родитель
14e303d98b
Коммит
8867048b48
|
@ -1827,7 +1827,6 @@ static int
|
||||||
qla24xx_vport_delete(struct fc_vport *fc_vport)
|
qla24xx_vport_delete(struct fc_vport *fc_vport)
|
||||||
{
|
{
|
||||||
scsi_qla_host_t *vha = fc_vport->dd_data;
|
scsi_qla_host_t *vha = fc_vport->dd_data;
|
||||||
fc_port_t *fcport, *tfcport;
|
|
||||||
struct qla_hw_data *ha = vha->hw;
|
struct qla_hw_data *ha = vha->hw;
|
||||||
uint16_t id = vha->vp_idx;
|
uint16_t id = vha->vp_idx;
|
||||||
|
|
||||||
|
@ -1841,11 +1840,7 @@ qla24xx_vport_delete(struct fc_vport *fc_vport)
|
||||||
|
|
||||||
scsi_remove_host(vha->host);
|
scsi_remove_host(vha->host);
|
||||||
|
|
||||||
list_for_each_entry_safe(fcport, tfcport, &vha->vp_fcports, list) {
|
qla2x00_free_fcports(vha);
|
||||||
list_del(&fcport->list);
|
|
||||||
kfree(fcport);
|
|
||||||
fcport = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
qla24xx_deallocate_vp_id(vha);
|
qla24xx_deallocate_vp_id(vha);
|
||||||
|
|
||||||
|
|
|
@ -122,6 +122,7 @@ extern struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *,
|
||||||
extern void qla2x00_free_host(struct scsi_qla_host *);
|
extern void qla2x00_free_host(struct scsi_qla_host *);
|
||||||
extern void qla2x00_relogin(struct scsi_qla_host *);
|
extern void qla2x00_relogin(struct scsi_qla_host *);
|
||||||
extern void qla2x00_do_work(struct scsi_qla_host *);
|
extern void qla2x00_do_work(struct scsi_qla_host *);
|
||||||
|
extern void qla2x00_free_fcports(struct scsi_qla_host *);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Global Functions in qla_mid.c source file.
|
* Global Functions in qla_mid.c source file.
|
||||||
|
|
|
@ -2487,11 +2487,24 @@ qla2x00_free_device(scsi_qla_host_t *vha)
|
||||||
|
|
||||||
qla2x00_free_irqs(vha);
|
qla2x00_free_irqs(vha);
|
||||||
|
|
||||||
|
qla2x00_free_fcports(vha);
|
||||||
|
|
||||||
qla2x00_mem_free(ha);
|
qla2x00_mem_free(ha);
|
||||||
|
|
||||||
qla2x00_free_queues(ha);
|
qla2x00_free_queues(ha);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void qla2x00_free_fcports(struct scsi_qla_host *vha)
|
||||||
|
{
|
||||||
|
fc_port_t *fcport, *tfcport;
|
||||||
|
|
||||||
|
list_for_each_entry_safe(fcport, tfcport, &vha->vp_fcports, list) {
|
||||||
|
list_del(&fcport->list);
|
||||||
|
kfree(fcport);
|
||||||
|
fcport = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
qla2x00_schedule_rport_del(struct scsi_qla_host *vha, fc_port_t *fcport,
|
qla2x00_schedule_rport_del(struct scsi_qla_host *vha, fc_port_t *fcport,
|
||||||
int defer)
|
int defer)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче