[SCSI] libfc: whenever queueing delete ev for rport, set state to NONE
authorAbhijeet Joglekar <abjoglek@cisco.com>
Tue, 21 Apr 2009 23:27:19 +0000 (16:27 -0700)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Mon, 27 Apr 2009 15:19:03 +0000 (10:19 -0500)
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>
drivers/scsi/libfc/fc_rport.c

index 5bf7a949f05178f1895549394b671df9dc1281d9..e675f5ac30ccc30f6d1e8110fb774ca781950474 100644 (file)
@@ -444,6 +444,7 @@ static void fc_rport_error(struct fc_rport *rport, struct fc_frame *fp)
        case RPORT_ST_PRLI:
        case RPORT_ST_LOGO:
                rdata->event = RPORT_EV_FAILED;
+               fc_rport_state_enter(rport, RPORT_ST_NONE);
                queue_work(rport_event_queue,
                           &rdata->event_work);
                break;
@@ -664,6 +665,7 @@ static void fc_rport_prli_resp(struct fc_seq *sp, struct fc_frame *fp,
        } else {
                FC_DBG("Bad ELS response\n");
                rdata->event = RPORT_EV_FAILED;
+               fc_rport_state_enter(rport, RPORT_ST_NONE);
                queue_work(rport_event_queue, &rdata->event_work);
        }
 
@@ -715,6 +717,7 @@ static void fc_rport_logo_resp(struct fc_seq *sp, struct fc_frame *fp,
        } else {
                FC_DBG("Bad ELS response\n");
                rdata->event = RPORT_EV_LOGO;
+               fc_rport_state_enter(rport, RPORT_ST_NONE);
                queue_work(rport_event_queue, &rdata->event_work);
        }
 
@@ -1293,6 +1296,7 @@ static void fc_rport_recv_logo_req(struct fc_rport *rport, struct fc_seq *sp,
        }
 
        rdata->event = RPORT_EV_LOGO;
+       fc_rport_state_enter(rport, RPORT_ST_NONE);
        queue_work(rport_event_queue, &rdata->event_work);
 
        lport->tt.seq_els_rsp_send(sp, ELS_LS_ACC, NULL);