diff options
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/libfc/fc_rport.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c index 49e1ccca09d..3b669377406 100644 --- a/drivers/scsi/libfc/fc_rport.c +++ b/drivers/scsi/libfc/fc_rport.c | |||
@@ -801,6 +801,20 @@ static void fc_rport_recv_flogi_req(struct fc_lport *lport, | |||
801 | 801 | ||
802 | switch (rdata->rp_state) { | 802 | switch (rdata->rp_state) { |
803 | case RPORT_ST_INIT: | 803 | case RPORT_ST_INIT: |
804 | /* | ||
805 | * If received the FLOGI request on RPORT which is INIT state | ||
806 | * (means not transition to FLOGI either fc_rport timeout | ||
807 | * function didn;t trigger or this end hasn;t received | ||
808 | * beacon yet from other end. In that case only, allow RPORT | ||
809 | * state machine to continue, otherwise fall through which | ||
810 | * causes the code to send reject response. | ||
811 | * NOTE; Not checking for FIP->state such as VNMP_UP or | ||
812 | * VNMP_CLAIM because if FIP state is not one of those, | ||
813 | * RPORT wouldn;t have created and 'rport_lookup' would have | ||
814 | * failed anyway in that case. | ||
815 | */ | ||
816 | if (lport->point_to_multipoint) | ||
817 | break; | ||
804 | case RPORT_ST_DELETE: | 818 | case RPORT_ST_DELETE: |
805 | mutex_unlock(&rdata->rp_mutex); | 819 | mutex_unlock(&rdata->rp_mutex); |
806 | rjt_data.reason = ELS_RJT_FIP; | 820 | rjt_data.reason = ELS_RJT_FIP; |