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 | |
| 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>
| -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); |
