[SCSI] qla2xxx: Correct vport delete bug.
Signed-off-by: Anirban Chakraborty <anirban.chakraborty@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
605aa2bcd5
commit
ee546b6e04
3 changed files with 15 additions and 9 deletions
|
@ -2614,6 +2614,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha,
|
|||
port_id_t wrap, nxt_d_id;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
struct scsi_qla_host *vp, *base_vha = pci_get_drvdata(ha->pdev);
|
||||
struct scsi_qla_host *tvp;
|
||||
|
||||
rval = QLA_SUCCESS;
|
||||
|
||||
|
@ -2713,7 +2714,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha,
|
|||
/* Bypass virtual ports of the same host. */
|
||||
found = 0;
|
||||
if (ha->num_vhosts) {
|
||||
list_for_each_entry(vp, &ha->vp_list, list) {
|
||||
list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
|
||||
if (new_fcport->d_id.b24 == vp->d_id.b24) {
|
||||
found = 1;
|
||||
break;
|
||||
|
@ -2836,6 +2837,7 @@ qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev)
|
|||
uint16_t first_loop_id;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
struct scsi_qla_host *vp;
|
||||
struct scsi_qla_host *tvp;
|
||||
|
||||
rval = QLA_SUCCESS;
|
||||
|
||||
|
@ -2860,7 +2862,7 @@ qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev)
|
|||
/* Check for loop ID being already in use. */
|
||||
found = 0;
|
||||
fcport = NULL;
|
||||
list_for_each_entry(vp, &ha->vp_list, list) {
|
||||
list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
|
||||
list_for_each_entry(fcport, &vp->vp_fcports, list) {
|
||||
if (fcport->loop_id == dev->loop_id &&
|
||||
fcport != dev) {
|
||||
|
@ -3295,6 +3297,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
|
|||
uint8_t status = 0;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
struct scsi_qla_host *vp;
|
||||
struct scsi_qla_host *tvp;
|
||||
struct req_que *req = ha->req_q_map[0];
|
||||
|
||||
if (vha->flags.online) {
|
||||
|
@ -3310,7 +3313,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
|
|||
if (atomic_read(&vha->loop_state) != LOOP_DOWN) {
|
||||
atomic_set(&vha->loop_state, LOOP_DOWN);
|
||||
qla2x00_mark_all_devices_lost(vha, 0);
|
||||
list_for_each_entry(vp, &ha->vp_list, list)
|
||||
list_for_each_entry_safe(vp, tvp, &ha->vp_list, list)
|
||||
qla2x00_mark_all_devices_lost(vp, 0);
|
||||
} else {
|
||||
if (!atomic_read(&vha->loop_down_timer))
|
||||
|
@ -3407,7 +3410,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
|
|||
DEBUG(printk(KERN_INFO
|
||||
"qla2x00_abort_isp(%ld): succeeded.\n",
|
||||
vha->host_no));
|
||||
list_for_each_entry(vp, &ha->vp_list, list) {
|
||||
list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
|
||||
if (vp->vp_idx)
|
||||
qla2x00_vp_abort_isp(vp);
|
||||
}
|
||||
|
|
|
@ -2685,6 +2685,7 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
|
|||
uint16_t stat = le16_to_cpu(rptid_entry->vp_idx);
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
scsi_qla_host_t *vp;
|
||||
scsi_qla_host_t *tvp;
|
||||
|
||||
if (rptid_entry->entry_status != 0)
|
||||
return;
|
||||
|
@ -2710,7 +2711,7 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
|
|||
if (MSB(stat) == 1)
|
||||
return;
|
||||
|
||||
list_for_each_entry(vp, &ha->vp_list, list)
|
||||
list_for_each_entry_safe(vp, tvp, &ha->vp_list, list)
|
||||
if (vp_idx == vp->vp_idx)
|
||||
break;
|
||||
if (!vp)
|
||||
|
|
|
@ -69,9 +69,10 @@ static scsi_qla_host_t *
|
|||
qla24xx_find_vhost_by_name(struct qla_hw_data *ha, uint8_t *port_name)
|
||||
{
|
||||
scsi_qla_host_t *vha;
|
||||
struct scsi_qla_host *tvha;
|
||||
|
||||
/* Locate matching device in database. */
|
||||
list_for_each_entry(vha, &ha->vp_list, list) {
|
||||
list_for_each_entry_safe(vha, tvha, &ha->vp_list, list) {
|
||||
if (!memcmp(port_name, vha->port_name, WWN_SIZE))
|
||||
return vha;
|
||||
}
|
||||
|
@ -194,11 +195,11 @@ qla24xx_configure_vp(scsi_qla_host_t *vha)
|
|||
void
|
||||
qla2x00_alert_all_vps(struct rsp_que *rsp, uint16_t *mb)
|
||||
{
|
||||
scsi_qla_host_t *vha;
|
||||
scsi_qla_host_t *vha, *tvha;
|
||||
struct qla_hw_data *ha = rsp->hw;
|
||||
int i = 0;
|
||||
|
||||
list_for_each_entry(vha, &ha->vp_list, list) {
|
||||
list_for_each_entry_safe(vha, tvha, &ha->vp_list, list) {
|
||||
if (vha->vp_idx) {
|
||||
switch (mb[0]) {
|
||||
case MBA_LIP_OCCURRED:
|
||||
|
@ -300,6 +301,7 @@ qla2x00_do_dpc_all_vps(scsi_qla_host_t *vha)
|
|||
int ret;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
scsi_qla_host_t *vp;
|
||||
struct scsi_qla_host *tvp;
|
||||
|
||||
if (vha->vp_idx)
|
||||
return;
|
||||
|
@ -308,7 +310,7 @@ qla2x00_do_dpc_all_vps(scsi_qla_host_t *vha)
|
|||
|
||||
clear_bit(VP_DPC_NEEDED, &vha->dpc_flags);
|
||||
|
||||
list_for_each_entry(vp, &ha->vp_list, list) {
|
||||
list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
|
||||
if (vp->vp_idx)
|
||||
ret = qla2x00_do_dpc_vp(vp);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue