.. | .. |
---|
2698 | 2698 | qla2x00_terminate_rport_io(struct fc_rport *rport) |
---|
2699 | 2699 | { |
---|
2700 | 2700 | fc_port_t *fcport = *(fc_port_t **)rport->dd_data; |
---|
| 2701 | + scsi_qla_host_t *vha; |
---|
2701 | 2702 | |
---|
2702 | 2703 | if (!fcport) |
---|
2703 | 2704 | return; |
---|
.. | .. |
---|
2707 | 2708 | |
---|
2708 | 2709 | if (test_bit(ABORT_ISP_ACTIVE, &fcport->vha->dpc_flags)) |
---|
2709 | 2710 | return; |
---|
| 2711 | + vha = fcport->vha; |
---|
2710 | 2712 | |
---|
2711 | 2713 | if (unlikely(pci_channel_offline(fcport->vha->hw->pdev))) { |
---|
2712 | 2714 | qla2x00_abort_all_cmds(fcport->vha, DID_NO_CONNECT << 16); |
---|
| 2715 | + qla2x00_eh_wait_for_pending_commands(fcport->vha, fcport->d_id.b24, |
---|
| 2716 | + 0, WAIT_TARGET); |
---|
2713 | 2717 | return; |
---|
2714 | 2718 | } |
---|
2715 | 2719 | /* |
---|
.. | .. |
---|
2723 | 2727 | fcport->d_id.b.area, fcport->d_id.b.al_pa); |
---|
2724 | 2728 | else |
---|
2725 | 2729 | qla2x00_port_logout(fcport->vha, fcport); |
---|
| 2730 | + } |
---|
| 2731 | + |
---|
| 2732 | + /* check for any straggling io left behind */ |
---|
| 2733 | + if (qla2x00_eh_wait_for_pending_commands(fcport->vha, fcport->d_id.b24, 0, WAIT_TARGET)) { |
---|
| 2734 | + ql_log(ql_log_warn, vha, 0x300b, |
---|
| 2735 | + "IO not return. Resetting. \n"); |
---|
| 2736 | + set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); |
---|
| 2737 | + qla2xxx_wake_dpc(vha); |
---|
| 2738 | + qla2x00_wait_for_chip_reset(vha); |
---|
2726 | 2739 | } |
---|
2727 | 2740 | } |
---|
2728 | 2741 | |
---|
.. | .. |
---|
3015 | 3028 | vha->flags.difdix_supported = 1; |
---|
3016 | 3029 | ql_dbg(ql_dbg_user, vha, 0x7082, |
---|
3017 | 3030 | "Registered for DIF/DIX type 1 and 3 protection.\n"); |
---|
3018 | | - if (ql2xenabledif == 1) |
---|
3019 | | - prot = SHOST_DIX_TYPE0_PROTECTION; |
---|
3020 | 3031 | scsi_host_set_prot(vha->host, |
---|
3021 | 3032 | prot | SHOST_DIF_TYPE1_PROTECTION |
---|
3022 | 3033 | | SHOST_DIF_TYPE2_PROTECTION |
---|