PATCH [4/15] qla2xxx: PortID binding fixes
Subsystems (2)
ChangeSet
1.1925 04/04/30 10:48:48 [email protected] +1 -0 Fix problem where port ID binding would not be honoured when a device was moved within the fabric.
drivers/scsi/qla2xxx/qla_init.c | 33 ++++++++++++++++++++++++--------- 1 files changed, 24 insertions(+), 9 deletions(-)
drivers/scsi/qla2xxx/qla_init.c +24 -9
@@ -3290,6 +3290,7 @@static uint16_t qla2x00_fcport_bind (scsi_qla_host_t *ha,fc_port_t *fcport) { +int found;uint16_t tgt;os_tgt_t *tq;
@@ -3298,18 +3299,32 @@if ((tq =TGT_Q (ha, tgt)) ==NULL )continue ; -if (ha->binding_type ==BIND_BY_PORT_ID && - fcport->d_id.b24 == tq->d_id.b24) { -memcpy (tq->node_name, fcport->node_name,WWN_SIZE ); -memcpy (tq->port_name, fcport->port_name,WWN_SIZE ); + found =0 ; +switch (ha->binding_type) { +case BIND_BY_PORT_ID : +if (fcport->d_id.b24 == tq->d_id.b24) { +memcpy (tq->node_name, fcport->node_name, +WWN_SIZE ); +memcpy (tq->port_name, fcport->port_name, +WWN_SIZE ); + found++; + }break ; - } - -if (memcmp (fcport->port_name, tq->port_name,WWN_SIZE ) ==0 ) { -/* In case of persistent binding, update the WWNN */ -memcpy (tq->node_name, fcport->node_name,WWN_SIZE ); +case BIND_BY_PORT_NAME : +if (memcmp (fcport->port_name, tq->port_name, +WWN_SIZE ) ==0 ) { +/* +* In case of persistent binding, update the +* WWNN. +*/ +memcpy (tq->node_name, fcport->node_name, +WWN_SIZE ); + found++; + }break ; } +if (found) +break ; }/* TODO: honor the ConfigRequired flag */