summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJing Huang <huangj@brocade.com>2010-07-08 19:47:08 -0700
committerJames Bottomley <James.Bottomley@suse.de>2010-07-27 12:04:05 -0500
commit1769f990fc182695bc215ce4369688064addcd1e (patch)
treef09635abe9e660a6c30eb9b7f50707122e5cb270
parentd9883548a0b0afec4786e6c5cd8d03d43a30b779 (diff)
[SCSI] bfa: vport state machine fix
Vport state machine does not cleanup associated lport in some states: while waiting for fdisc response or fdisc failure state. The fixe is to cleanup lport on vport delete in all states. In fdisc state, discard fdisc response and delete lport and wait for lport deletecompletion. in error state, delete lport and wait for delete completion. Signed-off-by: Jing Huang <huangj@brocade.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
-rw-r--r--drivers/scsi/bfa/vport.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/scsi/bfa/vport.c b/drivers/scsi/bfa/vport.c
index f14e9f2d2c30..66f30a0d61e0 100644
--- a/drivers/scsi/bfa/vport.c
+++ b/drivers/scsi/bfa/vport.c
@@ -218,9 +218,9 @@ bfa_fcs_vport_sm_fdisc(struct bfa_fcs_vport_s *vport,
switch (event) {
case BFA_FCS_VPORT_SM_DELETE:
- bfa_sm_set_state(vport, bfa_fcs_vport_sm_logo);
+ bfa_sm_set_state(vport, bfa_fcs_vport_sm_cleanup);
bfa_lps_discard(vport->lps);
- bfa_fcs_vport_do_logo(vport);
+ bfa_fcs_port_delete(&vport->lport);
break;
case BFA_FCS_VPORT_SM_OFFLINE:
@@ -357,8 +357,9 @@ bfa_fcs_vport_sm_error(struct bfa_fcs_vport_s *vport,
switch (event) {
case BFA_FCS_VPORT_SM_DELETE:
- bfa_sm_set_state(vport, bfa_fcs_vport_sm_uninit);
- bfa_fcs_vport_free(vport);
+ bfa_sm_set_state(vport, bfa_fcs_vport_sm_cleanup);
+ bfa_fcs_port_delete(&vport->lport);
+
break;
default: