diff options
author | Abhijeet Joglekar <abjoglek@cisco.com> | 2009-04-21 19:27:19 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2009-04-27 11:19:03 -0400 |
commit | 55c7a60cf0c9113cb52d2b87abb120e951bdb332 (patch) | |
tree | 306ef996134a82268ce794004aad0fe1175c462a /drivers/scsi/libfc/fc_rport.c | |
parent | bbf156697a6332f9074e2b275a9157d99a431398 (diff) |
[SCSI] libfc: whenever queueing delete ev for rport, set state to NONE
When a delete event is queued for an rport, set state to NONE so that no
other processing is done on the rport as it is being removed.
Signed-off-by: Abhijeet Joglekar <abjoglek@cisco.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/libfc/fc_rport.c')
-rw-r--r-- | drivers/scsi/libfc/fc_rport.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c index 5bf7a949f051..e675f5ac30cc 100644 --- a/drivers/scsi/libfc/fc_rport.c +++ b/drivers/scsi/libfc/fc_rport.c | |||
@@ -444,6 +444,7 @@ static void fc_rport_error(struct fc_rport *rport, struct fc_frame *fp) | |||
444 | case RPORT_ST_PRLI: | 444 | case RPORT_ST_PRLI: |
445 | case RPORT_ST_LOGO: | 445 | case RPORT_ST_LOGO: |
446 | rdata->event = RPORT_EV_FAILED; | 446 | rdata->event = RPORT_EV_FAILED; |
447 | fc_rport_state_enter(rport, RPORT_ST_NONE); | ||
447 | queue_work(rport_event_queue, | 448 | queue_work(rport_event_queue, |
448 | &rdata->event_work); | 449 | &rdata->event_work); |
449 | break; | 450 | break; |
@@ -664,6 +665,7 @@ static void fc_rport_prli_resp(struct fc_seq *sp, struct fc_frame *fp, | |||
664 | } else { | 665 | } else { |
665 | FC_DBG("Bad ELS response\n"); | 666 | FC_DBG("Bad ELS response\n"); |
666 | rdata->event = RPORT_EV_FAILED; | 667 | rdata->event = RPORT_EV_FAILED; |
668 | fc_rport_state_enter(rport, RPORT_ST_NONE); | ||
667 | queue_work(rport_event_queue, &rdata->event_work); | 669 | queue_work(rport_event_queue, &rdata->event_work); |
668 | } | 670 | } |
669 | 671 | ||
@@ -715,6 +717,7 @@ static void fc_rport_logo_resp(struct fc_seq *sp, struct fc_frame *fp, | |||
715 | } else { | 717 | } else { |
716 | FC_DBG("Bad ELS response\n"); | 718 | FC_DBG("Bad ELS response\n"); |
717 | rdata->event = RPORT_EV_LOGO; | 719 | rdata->event = RPORT_EV_LOGO; |
720 | fc_rport_state_enter(rport, RPORT_ST_NONE); | ||
718 | queue_work(rport_event_queue, &rdata->event_work); | 721 | queue_work(rport_event_queue, &rdata->event_work); |
719 | } | 722 | } |
720 | 723 | ||
@@ -1293,6 +1296,7 @@ static void fc_rport_recv_logo_req(struct fc_rport *rport, struct fc_seq *sp, | |||
1293 | } | 1296 | } |
1294 | 1297 | ||
1295 | rdata->event = RPORT_EV_LOGO; | 1298 | rdata->event = RPORT_EV_LOGO; |
1299 | fc_rport_state_enter(rport, RPORT_ST_NONE); | ||
1296 | queue_work(rport_event_queue, &rdata->event_work); | 1300 | queue_work(rport_event_queue, &rdata->event_work); |
1297 | 1301 | ||
1298 | lport->tt.seq_els_rsp_send(sp, ELS_LS_ACC, NULL); | 1302 | lport->tt.seq_els_rsp_send(sp, ELS_LS_ACC, NULL); |