In fc_lport_error(), FC_EX_CLOSED could be understood to be no more rettries, so resetting local port is reasonable and necessary. When processing response to flogi request, FC_EX_CLOSED should be treated as other errors, since the state machine of local port could reach reset. Signed-off-by: Hillf Danton <dhillf@xxxxxxxxx> --- --- a/drivers/scsi/libfc/fc_lport.c 2010-11-01 19:54:12.000000000 +0800 +++ b/drivers/scsi/libfc/fc_lport.c 2010-12-16 23:46:06.000000000 +0800 @@ -1013,7 +1013,7 @@ static void fc_lport_error(struct fc_lpo lport->retry_count); if (PTR_ERR(fp) == -FC_EX_CLOSED) - return; + goto reset; /* * Memory allocation failure, or the exchange timed out @@ -1029,6 +1029,7 @@ static void fc_lport_error(struct fc_lpo schedule_delayed_work(&lport->retry_work, delay); } else + reset: fc_lport_enter_reset(lport); } @@ -1428,9 +1429,6 @@ void fc_lport_flogi_resp(struct fc_seq * FC_LPORT_DBG(lport, "Received a FLOGI %s\n", fc_els_resp_type(fp)); - if (fp == ERR_PTR(-FC_EX_CLOSED)) - return; - mutex_lock(&lport->lp_mutex); if (lport->state != LPORT_ST_FLOGI) { -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html